【问题标题】:Undesirable alignment when writing csv file using write.table in R在 R 中使用 write.table 写入 csv 文件时出现不希望的对齐
【发布时间】:2013-01-11 17:42:49
【问题描述】:

我正在尝试使用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 似乎没有帮助。我按照@Roman Luštrik 的建议使用了row.names=FALSE它解决了这个问题。但是第一行移位问题还没有解决。

【问题讨论】:

  • 你也会想要row.names = FALSE

标签: r csv createfile


【解决方案1】:

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

【讨论】:

    【解决方案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 = ",")
    }
    

    【讨论】:

    • (+1) 感谢您的帮助,尤其是第二个问题
    【解决方案3】:

    要了解 CSV 文件的外观,我建议您在文本编辑器中打开它,而不是在 Excel(它会转换它)中打开它。因为那时您可以看到您的 CSV 开头如下:

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

    ...两个太多的逗号。

    在您的writeLines 声明中,您的意思如下:

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

    你的问题是你用sep=","替换了writeLines的默认sep="\n",显然writeLines在最后一项之后也打印了一个分隔符,不像@987654328 @。 (当打印行作为默认操作时,这更有意义,也用\n 关闭最后一行。)

    write.Table 中,使用row.names=FALSE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-22
      • 2015-07-21
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多