在 R 中拆分大型数据框并输出到单个 Excel 工作簿中的单独工作表中

Posted

技术标签:

【中文标题】在 R 中拆分大型数据框并输出到单个 Excel 工作簿中的单独工作表中【英文标题】:Split large dataframe in R and output into separate sheets in a single Excel workbook 【发布时间】:2020-07-05 03:02:19 【问题描述】:

假设我在 R 中有以下数据框,我希望将数据框拆分为按水果列分类的单独 Excel 工作表


+--------+-------+
| Fruit  | Price |
+--------+-------+
| Apple  |    12 |
| Apple  |    14 |
| Apple  |    15 |
| Orange |     2 |
| Orange |     4 |
| Orange |     6 |
| Pear   |     3 |
| Pear   |     6 |
| Pear   |     9 |
+--------+-------+

将数据框拆分为 3 个单独的数据框(Apple、Orange 和 Pear)后,我打算将每个数据框导出到单独的 Excel 工作表(名为 Apple、Orange 和 Pear)中,但存储在同一个 Excel 工作簿 Out.xlsx 中。但是,下面的 R 代码不起作用。输出是一个 Excel 工作簿Out.xlsx,只有一个工作表 Pear,其中包含 Pear 数据框。

library(openxlsx)
df <- read_excel("Export excel test.xlsx")
output <- split(df, df$Fruit)
for (i in 1:length(output))write.xlsx(x = output[i],
file = "Out.xlsx", sheetName = names(output[i]),append = TRUE)

有人可以帮忙吗?我的实际数据框有超过 400 万行,因此我需要将数据框拆分为单独的工作表以规避 Excel 的行限制

【问题讨论】:

openxlsx 包中的write.xlsx 函数没有append 参数。 【参考方案1】:

看起来您正在使用 xlsx 包中的命令。

xlsx 包还提供write.xlsx 函数,允许您附加到现有工作簿。

library(xlsx)

write.xlsx(subset(iris, subset=Species=="setosa"), 
    file="iris.xlsx", sheetName = "setosa")

write.xlsx(subset(iris, subset=Species=="versicolor"), 
    file="iris.xlsx", sheetName = "versicolor", append=TRUE)

write.xlsx(subset(iris, subset=Species=="virginica"), 
    file="iris.xlsx", sheetName = "virginica", append=TRUE)

openxlsx 包的处理方式略有不同。这里我将使用循环。

library(openxlsx)

output <- split(iris, iris$Species)

wb <- createWorkbook()

for (i in 1:length(output)) 
  addWorksheet(wb, sheetName=names(output[i]))
  writeData(wb, sheet=names(output[i]), x=output[[i]]) # Note [[]]


saveWorkbook(wb, "iris.xlsx", overwrite = TRUE)

【讨论】:

以上是关于在 R 中拆分大型数据框并输出到单个 Excel 工作簿中的单独工作表中的主要内容,如果未能解决你的问题,请参考以下文章

按所有列拆分数据框并插入到数据框列表中

如何基于单个值拆分大型数据帧,1130.07 [重复]

按行数拆分大型excel文件

在 R 中拆分大型数据集的有效方法

在 Excel 工作表中操作数据框输出

如何在SSIS中将大型Excel文件拆分为多个小文件?