[英]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.