HOWTO Сохранение data.frame в Excel с Openxlsx, а затем повторное использование - PullRequest
0 голосов
/ 23 октября 2019

Я добавил небольшой пример, чтобы продемонстрировать проблему

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 обратно в данные.frame используя этот код:

df <- read_excel(sheet = 1, ExcelFile)

Элемент теперь выглядит следующим образом: "Roles_1, Roles_2, Roles_3"

и не может использоваться в моем коде.

IЯ использую data.frame для хранения параметров конфигурации, чтобы я мог создать отчет. Я предпочел бы прочитать информацию о конфигурации из Excel, чем жестко закодировать ее в своем коде.

Поскольку я новичок в этом, я приму любой совет, который смогу получить.

Спасибо

1 Ответ

0 голосов
/ 24 октября 2019

с вашей дополнительной информацией я мог бы сделать это с base пакетами.

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

Теперь у вас есть тот же контент, что и раньше.

...