繁体   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