HOWTO使用Openxlsx将data.frame保存到Excel,然后重用

时间:2019-10-23 15:27:00

标签: r readxl openxlsx

我添加了一个小例子来说明问题

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文件中如下所示: 角色_1,角色_2,角色_3

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

df <- read_excel(sheet = 1, ExcelFile)

该元素现在看起来像这样: “角色_1,角色_2,角色_3”

并且无法在我的代码中使用。

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

由于我是新来的,所以我会寻求任何建议。

谢谢

1 个答案:

答案 0 :(得分:0)

使用您的其他信息,我可以使用base软件包来完成此操作。

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

现在您拥有与以前相同的内容。