Экспорт фрейма данных в виде нескольких листов в одном файле Excel в R - PullRequest
0 голосов
/ 26 мая 2019

У меня есть такой фрейм данных, как эти фиктивные данные:

df <- data.frame(
  stringsAsFactors = FALSE,
  id = c(
    "100-1",
    "100-1",
    "100-2",
    "100-2",
    "100-5",
    "100-5",
    "100-5",
    "100-9",
    "100-9",
    "100-9"
  ),
  name = c(
    "Aggi",
    "Aggi",
    "Nina",
    "Nina",
    "Katrin",
    "Katrin",
    "Katrin",
    "Tom",
    "Tom",
    "Tom"
  ),
  date = c(
    "5/15/2019",
    "5/15/2019",
    "5/15/2019",
    "5/15/2019",
    "5/15/2019",
    "5/15/2019",
    "5/15/2019",
    "5/15/2019",
    "5/15/2019",
    "5/15/2019"
  ),
  start_time = c(
    "11:32:00",
    "11:37:30",
    "12:04:00",
    "12:08:00",
    "13:53:00",
    "13:55:00",
    "17:28:00",
    "17:29:00",
    "17:31:00",
    "17:34:45"
  ),
  end_time = c(
    "11:37:30",
    "12:04:00",
    "12:08:00",
    "13:53:00",
    "13:55:00",
    "17:28:00",
    "17:29:00",
    "17:31:00",
    "17:34:45",
    "17:38:45"
  )
)

После серии обработки данных я хочу экспортировать данные в один файл Excel, который содержит несколько таблиц для каждого имени переменной. Я нашел обходной путь здесь с openxlsx библиотекой.

# export one .xlsx file with sheet for each name:

    library(tidyverse)
    library(lubridate)
    library(openxlsx)

# make a list of names
        names <-
          as.list(
            df$name) %>%
          as.character() %>% 
          unique()

 # create wordbook       
        wb <- createWorkbook()

        for (d in names) {
           addWorksheet(wb, sheetName = d)
          writeData(wb, d, df)
        }

        saveWorkbook(wb, 'data.xlsx')

Мой скрипт работает и будет экспортировать один файл с несколькими листами, но каждый лист содержит все данные, а не подгруппу данных. Я хочу, чтобы один лист данных принадлежал Aggi (имя рабочего листа = Aggi) и так далее. Что мне не хватает? Очевидно, что для моего утверждения есть проблема.

1 Ответ

1 голос
/ 06 июня 2019

В вашей функции writeData вам нужно поднастроить данные для каждого соответствующего рабочего листа.

Итак, в вашем цикле for вам нужно что-то вроде:

for (d in names) {
  addWorksheet(wb, sheetName = d)
  writeData(wb, d, df[df$name == d, ]) ## Subsets on the name
}
...