如何在R中将整个数据框附加到CSV文件

21

我已经可以使用cat向CSV中添加一行,这使得操作非常简单:

  cat("my row, 1, 2, 3, 4", "mydf.csv",sep="\n", append=TRUE)

据我所知,您不能使用cat处理整个数据框(多列和多行)。

我这样做是因为我要将许多DFs写入CSV,并希望使用write.table附加多个CSV。这些数据框都具有相同数量的列。

我考虑过使用循环逐行写入cat,但这似乎不是最好的方法 - 有没有人知道在R中更好的方法?


5
为什么不使用 write.table 呢?它有一个 append=TRUE 选项,并且对于第一个数据框之后的每个数据框,您可以通过设置 col.names=FALSE 来关闭列名。 - MrFlick
1
@MrFlick或fwrite(...,append = TRUE)可以通过单个选项同时实现两者。 - Josiah Yoder
3个回答

40

好的,我意识到append=T与write.table一起使用是可以的 - 但是需要使用sep开关才能实现,因此这样就可以:

write.table(myDF, "myDF.csv", sep = ",", col.names = !file.exists("myDF.csv"), append = T)

它确实添加了列,但不幸的是它在开头添加了一行并删除了我的最后一个观察值。 - Sovik Gupta

1
另一种解决方法(使用cat),是将您的数据框转置,然后使用rbind添加一个仅包含“\ n”的行,然后将此数据框转换为向量(每个“行”后面都会有“\ n”),这样它将显示在您的csv文件中作为数据框。
以下是一个示例:
df <- rbind(t(df),"\n")
cat(c("",df),sep=",",append=TRUE)

注意:我的假设是您已经使用sink(文件路径/文件名.csv)打开了一个文件连接。

0
如果你有足够的内存,最高效的方法是将它们全部绑定在一起,然后写入文件。
df <- cbind(df1, df2, df3)
write.csv(df, "spam.csv")

否则,您可以在write.csv中使用append参数:
dfs <- c(df1, df2, df3)
for (df in dfs){
  write.csv(df, "eggs.csv", append = TRUE)
}

5
这些包装器(write.csvwrite.csv2)故意不灵活:它们旨在确保使用正确的约定来编写有效文件。尝试更改 appendcol.namessepdecqmethod 将被忽略,并显示警告。 - artm
自2010年以来,似乎append在write.csv中已经不起作用了...虽然R在不可挽回地删除某些内容后警告你删除它并没有太多意义...谁想出了这个美妙的主意? - Fons MA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接