【问题标题】:Write an excel or csv file in a way that the dataframes are listed on the same sheet, instead of multiple sheets in R以数据框列在同一张纸上的方式编写 excel 或 csv 文件,而不是 R 中的多张纸
【发布时间】:2022-11-29 00:34:58
【问题描述】:

我有一个包含多个数据框的对象,我想用这些数据生成一个 Excel 工作表。我知道有一些方法可以在 excel 中处理这个问题。但是有没有办法从 R 端操作它,这样人们就不必担心我的 R 脚本中没有的额外步骤?我一直在使用这个功能(见下文),但我对另一个功能持开放态度。此函数生成 1 个 excel 文件,但每个数据框都有一个工作表。我有 119 个数据帧。所以这不是很实用。

write_xlsx(results1, "hpresponse1.MinimallyAdjusted") 

我使用了 bind_rows。但是,一些数据丢失了。我不确定如何保留它,尤其是因为我什至不知道它是什么类型的数据。但我将我的逻辑回归结果转化为数据框,以便我能够执行某些操作。左边有一些不是变量的标签。我可以把这些数据变成一个变量,以便在我使用 bind_rows 时保留它吗?

【问题讨论】:

  • 我猜你的 results1 对象是一个数据框列表。在那种情况下,您可以使用例如将您的数据集行绑定到一个dplyr::bind_rows(results1) 在导出到 xl 之前。

标签: r save


【解决方案1】:

(在前面,我假设 199 帧都是不同的.或者至少它们的结构或使用方式使得您不能将它们组合成一个框架,正如 stefan 在 cmets 中所建议的那样。)

我建议您使用 openxlsx 包并分别偏移每个表。

L <- list(mtcars[1:3,1:3], mtcars[4:5,1:5], mtcars[6:10,1:4])
wb <- openxlsx::createWorkbook("quux.xlsx")
sapply(L, nrow)
# [1] 3 2 5
starts <- cumsum(c(1L, 2L + sapply(L[-length(L)], nrow)))
starts
# [1]  1  6 10

wb <- openxlsx::createWorkbook()
openxlsx::addWorksheet(wb, "quuxsheet")
ign <- Map(function(x, st) openxlsx::writeData(wb, sheet = "quuxsheet", x = x, startRow = st), L, starts)
openxlsx::saveWorkbook(wb, file = "quux.xlsx")

  • sapply(L, nrow) 为我们提供了列表中每个表的行数。这是为了让我们知道在一个表之后为下一个表偏移这么多行。因为我们不关心最后一帧的行数,所以我们用L[-length(L)]省略它
  • 2L + sapply(..) 为我们提供了工作表中每个框架之间 1 行的间隙。更改为以满足您的需要。
  • cumsum(c(1L, 2L+sapply(..)) 是因为我们需要一个绝对行号,而不仅仅是每一帧的计数。这导致 starts 保存 L 中每个帧的第一个 Excel 行号。

【讨论】:

    猜你喜欢
    • 2015-01-15
    • 2022-01-28
    • 2018-12-15
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多