R:将数据框拆分为 Workbook/Worksheets 列名

R: Split Data Frame into Workbook/Worksheets WITH column names

问题:在下面的示例中,我无法将列名从 DL_Import 获取到工作簿 wb 的许多工作表中,并进一步进入输出 Excel 文件 output.xlsx...

的许多工作表

Context:我有一个名为 DL_Import 的数据框,其中包含近 8,000 行数据和 19 列。我需要将其分解为保存的 xlsx 文件的多个工作表,以便在下游单独处理它们。我通过执行以下操作完成了此操作:

DL_Split <- split(DL_Import,rep(1:500,each=1000)) 
chunk <- 1000 
numRows <- nrow(DL_Import) 
DL_row  <- rep(1:ceiling(numRows/chunk),each=chunk)[1:numRows] 
DL_Split <- split(DL_Import,DL_row) 
numSheets <- length(DL_Split) 

wb <- createWorkbook() 
for (i in 1:numSheets)
{
  addWorksheet(wb, i) 
  writeData(wb, i, DL_Split[i], startRow = 1, startCol = 1, colNames = TRUE, rowNames = TRUE)
}

saveWorkbook(wb, file = "output.xlsx", overwrite = TRUE)

工作簿正确保存,在本例中,有 8 个工作表,名称为“1”、“2”、...“8”,但 缺少每个工作表中第 1 行的列标题工作表.

问题:如何确保 DL_Import 中的列名称传播到每个 wb 工作表中,以确保它被写入 output.xlsx 文件?

错误是您使用的是 [ 而不是 [[,这两者之间的区别相当简单但很关键:

  • [ returns 相同 class 的对象并且可以 select 一个或多个元素。
  • [[ returns 只有一个元素,没有将其强制转换为父结构的类型。

如果你尝试这段代码,你会发现它们是不同的:

class(DL_Split[1])
#> [1] "list"
class(DL_Split[[1]])
#> [1] "data.frame"

这就是openxlsx::writeData无法获取列名和行名的原因。


更正后的代码应如下所示

for (i in 1:numSheets)
{
  addWorksheet(wb, i) 
  writeData(wb, i, DL_Split[[i]], startRow = 1, startCol = 1, colNames = TRUE, rowNames = TRUE)
}