【问题标题】:Exporting a list of dataframes as csv将数据框列表导出为 csv
【发布时间】:2021-08-16 23:18:41
【问题描述】:

我有一个要导出为 csv 的数据框列表。我试过了:

for (i in listofdf){
  write.csv(listofdf[i], file = paste(names(listofdf)[i],".csv", sep=""), row.names = FALSE)
}

并得到:Error in listofdf[i] : invalid subscript type 'list'。我read 我正在将列表数据类型输入到需要向量的进程中,并尝试应用给定的解决方案:unlist(listofdf),但我得到的只是一个庞大的数值列表,我不知道如何处理。

然后我尝试了一个找到 here 的解决方案,它适用于给定的示例,但是当我尝试应用时:

sapply(names(listofdf),
       function (x) write.table(listofdf[x],
                                file = paste(names(listofdf)[x],".csv", sep=""),
                                row.names = FALSE))

但是当我尝试它时,它只导出一个名为 NA.csv 的文件。您知道如何使这些解决方案发挥作用吗?

【问题讨论】:

  • 它们必须是 csv 吗?如果没有,writexl::write_xlsx 会将列表的每个元素写入 Excel 工作簿中的工作表。它是矢量化的,因此您不需要循环,它使用列表名称作为工作表名称。
  • [[而不是[引用列表元素。
  • 也可以在你的代码中尝试listofdf[[i]]
  • Csv 是我习惯的格式,但我可以尝试其他格式。一两个 [ listofdf[[i]] 的相同问题给出了相同的错误(无效的下标类型“列表”),但 listofdf[[1]] 有效

标签: r list csv export


【解决方案1】:

您的问题是您如何索引您的 list 对象,而 names(listofdf)[i] 并没有按照您的想法进行操作。试试这个:

listofdf <- list(a = iris, b = iris, c = iris)

for (i in seq_along(listofdf)){
  write.csv(listofdf[[i]], file = paste0(names(listofdf)[i], ".csv"), row.names = F)
}

旁注:paste 的默认分隔符是空格。因此,您在代码的“.csv”扩展名之前放置了一个空格。 paste0 不会将字符串与空格一起粘贴。


或者,如前所述,您可以简单地使用writexlsx

library(writexl)

write_xlsx(listofdfs, "output.xlsx")

这将创建一个名为“output.xlsx”的文件,其中包含与names(listofdfs) 匹配的工作表以及存储在这些工作表中的正确值。

【讨论】:

  • 第一个解决方案的错误相同(下标类型“列表”无效),但第二个解决方案如您所说。我可以在 R 中单独导入工作表吗?
  • @Anthony,我做了一个可重复的小例子。您可以通过多种方式导入 Excel 文件的工作表。例如,您可以使用readxl::read_excel 指定特定工作表,也可以将整个工作簿导入list 对象,其中列表名称是使用rio::import_list 的工作表名称。
  • 确实,它适用于 iris 数据集,但仍然不适用于我的数据集。我会试着弄清楚这一点。 readxl 解决方案将完成这项工作。感谢您的帮助
  • @Anthony 不客气。不幸的是,如果没有看到您的更多结构,我无法确定是什么导致了您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-07
  • 1970-01-01
  • 2020-04-02
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多