1. ホーム
  2. r

[解決済み] write.tableはrownamesがある場合、不要な先頭の空のカラムをヘッダーに書き込む

2023-01-09 21:20:27

質問

この例を確認してください。

> a = matrix(1:9, nrow = 3, ncol = 3, dimnames = list(LETTERS[1:3], LETTERS[1:3]))
> a
  A B C
A 1 4 7
B 2 5 8
C 3 6 9

とすると、テーブルが正しく表示されます。ファイルへの書き込み方法は2種類ありますが...。

write.csv(a, 'a.csv') というのは、期待通りになります。

"","A","B","C"
"A",1,4,7
"B",2,5,8
"C",3,6,9

write.table(a, 'a.txt') であり、これは

"A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9

確かに、空のタブが消えていますね...下流域のものには面倒です。 これはバグなのでしょうか、それとも機能なのでしょうか? 回避策はあるのでしょうか?(他に write.table(cbind(rownames(a), a), 'a.txt', row.names=FALSE )

乾杯 yannick

どのように解決するのですか?

引用 ?write.table セクション CSVファイル :

<ブロッククオート

デフォルトでは、行名の列には列名はありません。 列の名前はありません。もし col.names = NArow.names = TRUE には空白の カラム名が追加されます。 これは、CSVファイルを表計算ソフトで読み込む際に使用される これはCSVファイルを表計算ソフトで読み込むときに使われる規則です。

そのため、以下のようにする必要があります。

write.table(a, 'a.txt', col.names=NA)

とすると

"" "A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9