0

を使用して出力を書き込み、csvファイルに追加しようとしていますR。最初に、プログラムはヘッダーを書き込み、次にforループ内に生成された行を追加します。コード例は次のとおりです。

   writeLines(text=c('Mean','Sd','\n'),'file.csv',sep=',')
   for(i in 1:5)
    {x <- rnorm(10); dat1 <- cbind(mean(x),sd(x))
      write.table(dat1,'file.csv',append=TRUE,sep=',',col.names=FALSE)
    }

しかし、これは私の最初の行を1つの要素だけ右にシフトし、csv出力で次のようになります。どうすればこれを回避できますか?私がここでやろうとしていることを達成する別の方法はありますか?

編集また、この場合は1で ある列ラベルを削除するにはどうすればよいですか?col.names=FALSE役に立たないようです。row.names=FALSE@RomanLuštrikの提案どおりに使用しました。この問題は解決しました。しかし、最初の行シフトの問題はまだ解決されていません。

ここに画像の説明を入力してください

4

3 に答える 3

2

私はしばしばそのような方法でファイルに書き込む必要がありました。私は通常このようにします。

ファイルがすでに存在する場合は、列名と行名を付けずに追加するだけです。そうでない場合は、新しいものを作成します。

x <- rnorm(10); dat1 <- data.frame(Mean = mean(x), Sd = sd(x))
if (file.exists("file.csv")) {
   write.table(dat1, file = "file.csv", append = TRUE, col.names = FALSE, row.names = FALSE, sep = ",")
} else {
   write.table(dat1, file = "file.csv", col.names = TRUE, row.names = FALSE, sep = ",")
}
于 2013-01-11T17:59:25.677 に答える
2

使ってみませんpaste()か?

writeLines(text=paste(c('Mean','Sd'),collapse=','),'file.csv',sep="\n")
for(i in 1:5) {
  x <- rnorm(10); dat1 <- cbind(mean(x),sd(x))
  write.table(dat1, 'file.csv', append=TRUE, sep=',', row.names=FALSE, col.names=FALSE)
}
于 2013-01-11T18:07:34.563 に答える
0

CSVファイルがどのように表示されるかを理解するには、Excel(変換)ではなくテキストエディターで開くことをお勧めします。それで、CSVが次のように始まることがわかります。

Mean,Sd,
,"1",0.441737369447746,1.07695222886305
[...]

...コンマが多すぎます。

あなたのwriteLines声明では、あなたが意味したのは次のとおりです。

   writeLines(paste('Mean','Sd',sep=","),'file.csv')

あなたの場合の問題は、デフォルトsep="\n"writeLinesをに置き換え、最後の項目のに、とは異なり、sep=","明らかwriteLinesにセパレータを出力することです。(これは、デフォルトの操作として行を印刷する場合にはるかに意味があり、最後の行も。で閉じます。)paste\n

write.Table、を使用しますrow.names=FALSE

于 2013-01-11T18:31:07.993 に答える