rownamesを有する場合にはwrite.tableヘッダに不要なリーディング空のコラムを執筆します

StackOverflow https://stackoverflow.com/questions/2478352

  •  21-09-2019
  •  | 
  •  

質問

この例をチェックします:

> 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以外)

乾杯、 ヤニック

役に立ちましたか?

解決

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

  

はデフォルトでは何のために列名がありません   列名のカラム。 col.names = NArow.names = TRUE空白の場合   列名がある、追加されます   なるようにCSVファイル用に使用される規則   スプレッドシートで読み取ります。

あなたがしなければならないので、

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

とあなたが得る

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

他のヒント

は@Marek非常に有用な答えにわずかな変更がrownames列にヘッダを追加します:実rownamesを無視して、一時的data.frameの最初の列としてrownamesを追加し、それを書き込み

> a = matrix(1:9, nrow = 3, ncol = 3, dimnames = list(LETTERS[1:3], LETTERS[1:3]))
> write.table(data.frame("H"=rownames(a),a),"a.txt", row.names=FALSE)

とあなたが得る

"H" "A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9
tidyverse の中で働いて誰のために

(dplyr、等)、からrownames_to_column()機能tibble のパッケージをカラムにrow.namesを変換する簡単に使用することができ、例えばます:

library('tibble')
a = as.data.frame(matrix(1:9, nrow=3, ncol=3, 
                  dimnames=list(LETTERS[1:3], LETTERS[1:3])))

a %>% rownames_to_column('my_id')

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

すべての列のヘッダー名を持つ出力でrow.names=FALSE結果でwrite.table()オプションでこれを組み合わせるます。

write.table()の行列を保存するときに同じ問題を経験し、row.names列を維持したい人のために、実際には非常に簡単な解決策があります:

 write.table(matrix,file="file.csv",quote=F,sep=";", row.names=T
             col.names=c("row_name_col;val1_col","val2_col"))
あなたは基本的にrow.names列のヘッダ・ラベルを作成するにwrite.table機能をだましていることにすれば、

:結果の.csvファイルは次のようになります。
row_name_col;val1_col;val2_col
row1;1;4 
row2;2;5 
row3;3;6 

私は、接続を使用することにより、柔軟性を追加し@mnelから簡単な関数を、改訂されました。ここでは機能があります:

my.write <- function(x, file, header, f = write.csv, ...){
# create and open the file connection
datafile <- file(file, open = 'wt')
# close on exit 
on.exit(close(datafile))
# if a header is defined, write it to the file (@CarlWitthoft's suggestion)
if(!missing(header)) {
writeLines(header,con=datafile, sep='\t')
writeLines('', con=datafile, sep='\n')
}
# write the file using the defined function and required addition arguments  
f(x, datafile,...)
}

あなたは 'write.delim' など、 'はwrite.table'、 'write.csv' であると関数を指定することができます。

乾杯!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top