У меня есть фрейм данных, подобный этим фиктивным данным:
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) и так далее. Что мне не хватает? По-видимому, у моего оператора for есть проблема.
В вашей функции writeData
вам нужно подмножить данные для каждого соответствующего рабочего листа.
Итак, в вашем цикле for
вам нужно что-то вроде:
for (d in names) {
addWorksheet(wb, sheetName = d)
writeData(wb, d, df[df$name == d, ]) ## Subsets on the name
}