如何将整个数据框附加到 R 中的 CSV

Posted

技术标签:

【中文标题】如何将整个数据框附加到 R 中的 CSV【英文标题】:How to append a whole dataframe to a CSV in R 【发布时间】:2014-10-15 16:49:27 【问题描述】:

我已经可以使用 cat 将一行附加到 CSV 中,这非常容易:

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

但据我所知,您不能将 cat 用于整个数据框(多列和多行)。

我这样做是因为我正在将许多 DF 写入 CSV,并且我想使用 write.table 附加多个 CSV。数据框都有相同的列数。

我想过在行上循环以用 cat 编写,但这听起来不是最好的方法 - 任何人都有在 R 中这样做的好方法吗?

【问题讨论】:

为什么不使用write.table?它有一个append=TRUE 选项,您可以在第一个之后的每个data.frame 中使用col.names=FALSE 关闭列名。 @MrFlick 或fwrite( ... , append = TRUE),只需一个选项即可。 【参考方案1】:

好的,所以我意识到 append=T 确实适用于 write.table - 但 write.table 需要使用 sep 开关,所以它有效:

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

【讨论】:

它确实附加了列,但不幸的是它在开始时又添加了一行并删除了我最后的观察结果。【参考方案2】:

另一种解决方法(使用 cat)是转置数据帧,然后使用 rbind 附加仅包含“\n”的行,然后将此数据帧转换为向量(在每个 'row 之后都会有“\n” ') 现在将作为数据框显示在您的 csv 文件中。

下面是一个例子:

df <- rbind(t(df),"\n")
cat(c("",df),sep=",",append=TRUE)

注意:我的假设是您已经使用 sink(filepath/filename.csv) 打开了与文件的连接。

【讨论】:

【参考方案3】:

如果你有足够的内存,最有效的方法是将它们全部绑定在一起然后写入文件:

df <- cbind(df1, df2, df3)
write.csv(df, "spam.csv")

否则,您可以使用write.csv中的追加参数:

dfs <- c(df1, df2, df3)
for (df in dfs)
  write.csv(df, "eggs.csv", append = TRUE)

【讨论】:

"这些包装器(write.csvwrite.csv2)故意不灵活:它们旨在确保使用正确的约定来写入有效的文件。尝试更改 append、@987654327 @、sepdecqmethod 将被忽略,并带有警告。" Append 自 2010 年以来显然没有与 write.csv 一起使用......并不是说 R 在不可挽回地删除某些内容后警告您删除它是很有意义的......谁想出了好主意?

以上是关于如何将整个数据框附加到 R 中的 CSV的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pandas 将新的数据帧行附加到 csv?

如何遍历数据框,将新字段添加到系列,然后将该系列附加到 csv?

无法在不覆盖的情况下将 R 数据框附加到现有 Excel 中

如何将列表项附加到数据框中的特定列?

将列表附加到R中的数据框

如何将字符串附加到R中的变量名子集?