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)
}
问题:在下面的示例中,我无法将列名从 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)
}