КАК Сохраните data.frame в Excel с помощью 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, чем жестко кодировать ее в своем коде.

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

Спасибо


person NewAtThis    schedule 23.10.2019    source источник
comment
Привет, вы можете использовать str_split из library(stringr), чтобы разделить вектор. Кроме того, если вы переработаете свой пример, чтобы люди могли воссоздать файл примера. Помочь будет проще. И прямо сейчас ваш фрейм данных c(...) выглядит для меня как вектор.   -  person Johannes Stötzer    schedule 23.10.2019
comment
Data.frame содержит около 15 различных элементов, которые варьируются от векторов до чисел, логических значений и т. д. Я обобщил только один, чтобы проиллюстрировать мою проблему. Я использую эту команду для создания data.frame df ‹- data.frame(cElementNames = cbind(list(c(Roles_1, Roles_2, Roles_3)))) Когда я читаю из файла Excel, cElementNames нельзя использовать в моем существующем коде .   -  person NewAtThis    schedule 23.10.2019


Ответы (1)


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

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

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

person Johannes Stötzer    schedule 23.10.2019
comment
Решение, рекомендованное Йоханнесом Штотцером, сработало. - person NewAtThis; 24.10.2019
comment
привет вам не нужно комментировать, что это помогло вам. Вместо этого проголосуйте и отметьте его как решение, чтобы другим было легче его увидеть. - person Johannes Stötzer; 25.10.2019