簡體   English   中英

在R中使用write.table寫入csv文件時出現不良對齊

[英]Undesirable alignment when writing csv file using write.table in R

我正在嘗試使用R編寫輸出並將其附加到csv文件。 首先,程序將寫入標頭,然后在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)
    }

但這會將我的第一行向右移動一個元素,從而在csv輸出中提供以下內容。 如何避免這種情況? 還有另一種方法可以實現我在這里要做的事情嗎?

編輯另外,在這種情況下,如何刪除列標記為1的列? col.names=FALSE似乎沒有幫助。 我使用了row.names=FALSE所建議的row.names row.names=FALSE 它解決了這個問題。 但是,第一行移位問題尚未解決。

在此處輸入圖片說明

我經常不得不以這種方式寫入文件。 我通常這樣做。

如果文件已經存在,只需追加不包含列名和行名的文件。 如果沒有,請創建一個全新的。

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 = ",")
}

為什么不使用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)
}

要了解CSV文件的外觀,建議您在文本編輯器中而不是在Excel中(將其轉換)打開它。 因為這樣您可以看到您的CSV像這樣開始:

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

...兩個逗號過多。

在您的writeLines語句中,您的意思是:

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

您遇到的問題是,您用sep=","替換了默認的writeLines sep="\\n" sep=","並且顯然writeLines在最后一項之后也打印了一個分隔符,這與paste不同。 (這在將行作為默認操作打印時更有意義,因為最后一行也用\\n 。)

write.Table ,使用row.names=FALSE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM