【问题标题】:HOWTO Save a data.frame to Excel with Openxlsx and then reuse如何使用 Openxlsx 将 data.frame 保存到 Excel,然后重用
【发布时间】:2019-10-23 15:27:00
【问题描述】:

我添加了一个小例子来演示这个问题

library("readxl")
library("openxlsx")

df <- data.frame(QN=1, ST = "String", EL=cbind(list(c("Var1", "Var2"))), BL=FALSE)

cat(paste0("\nQ=", as.numeric(df$QN[[1]])))
cat(paste0("\nST=", as.character(df$ST[[1]])))
cat(paste0("\nEL=", as.character(df$EL[[1]])))
cat(paste0("\nBL=", as.logical(df$BL[[1]])))

wb <- createWorkbook("TEST")

addWorksheet(wb, "Data")
writeData(wb, sheet = 1, df)

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

df2 <- read_excel(sheet = 1, "Test.xlsx")

cat(paste0("\n\nQ2=", as.numeric(df2$QN[[1]])))
cat(paste0("\nST2=", as.character(df2$ST[[1]])))
cat(paste0("\nEL2=", as.character(df2$EL[[1]])))
cat(paste0("\nBL2=", as.logical(df2$BL[[1]])))

输出看起来像这样

Q=1
ST=String
EL=Var1 
EL=Var2
BL=FALSE

Q2=1
ST2=String
EL2=Var1, Var2
BL2=FALSE

当我使用 view(df) 查看数据框时,我看到:

c("Var1", "Var2") for EL

当我查看第二个日期框架时,我看到了:

Var1, Var2 for EL

注意 EL 和 EL2 之间的区别。我希望 EL2 匹配 EL。

--- 原始问题 --- 我有一个看起来像这样的简单数据框(我将只列出一个元素):

cElementNames
c("Roles_1", "Roles_2", "Roles_3")

我使用以下代码将数据框保存到 Excel:

writeData(wb, sheet = iSheet, df, startCol = 1, startRow = 1)

该列在 Excel 文件中如下所示: Roles_1、Roles_2、Roles_3

我使用以下代码将 Excel 文件读回 data.frame:

df <- read_excel(sheet = 1, ExcelFile)

元素现在看起来像这样: "Roles_1、Roles_2、Roles_3"

并且在我的代码中不可用。

我正在使用 data.frame 来保存配置选项,以便生成报告。我宁愿从 Excel 中读取配置信息,也不愿在我的代码中硬编码。

由于我是这方面的新手,我会听取我能得到的任何建议。

谢谢

【问题讨论】:

  • 您好,您可以使用str_split 中的library(stringr) 来拆分向量。除此之外,如果您修改示例,以便人们可以重新创建示例文件。帮助会更容易。现在你的数据框 c(...) 在我看来就像一个向量。
  • data.frame 包含大约 15 个不同的元素,从向量到数字、布尔值等不一而足。我总结了一个来说明我的问题。我使用此命令创建 data.frame df

标签: r readxl openxlsx


【解决方案1】:

有了你的额外信息,我可以用base 包来做到这一点。

df2$EL2 <- lapply(strsplit(df2$EL, ","), trimws, "l")
identical(df2$EL2[1], df$EL[1])

现在你有和以前一样的内容了。

【讨论】:

  • Johannes Stotzer 推荐的解决方案奏效了。
  • 您好,您无需评论它对您有帮助。而是点赞并将其标记为解决方案,这样其他人会更容易看到。
猜你喜欢
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多