我有一个数据框列表,想根据列值将它们导出到单独的电子表格中。这是一个例子:
DF <- data.frame(Company=c('Alpha', 'Alpha', 'Alpha', 'Beta', 'Beta', 'Gamma', 'Epsilon'),
Location=c('NY', 'NY', 'CHI', 'LA', 'CHI','LA', 'LA' ),
ID=c('1234', '1234', '1234', '5678', '5678', '2468', '2468'),
Charge=c(25,25,51, 60,60, 15, 15))
DF2 <- data.frame(Company=c('Alpha', 'Alpha', 'Beta', 'Beta', 'Delta', 'Delta', 'Delta'),
Location=c('NY', 'NY', 'CHI', 'LA', 'CHI','LA', 'LA' ),
ID=c('1234', '1234', '1234', '5678', '4567', '4567', '4567'),
Charge=c(25,25,51, 60,60, 15, 15))
DF3 <- data.frame(Company=c('Alpha', 'Alpha', 'Beta', 'Delta', 'Delta','Delta','Delta'),
Location=c('NY', 'NY', 'CHI', 'LA', 'CHI','LA', 'LA' ),
ID=c('1234', '1234', '1234', '5678', '4567', '6789', '6789'),
Charge=c(25,25,51, 60,60, 15, 15))
当我使用下面的代码按公司拆分时,我收到错误,因为公司名称不在每个数据框中。
list(
DF, DF2, DF3
) %>%
purrr::set_names(paste("SpreadsheetA"), paste("SpreadsheetB"), paste("SpreadsheetC"), paste("SpreadsheetD")) %>%
purrr::map(~ split(.x, .x$Company)) %>%
purrr::transpose() %>%
purrr::iwalk(~writexl::write_xlsx(.x, file.path(path, paste0("results_", .y, ".xlsx"))))
每个导出的 Excel 文档的电子表格必须具有相同的名称。我希望最终结果是,即使公司没有出现在电子表格 A、B、C 或 D 中,我也希望按公司名称自动导出 excel 文档。例如,我将有一个 excel 文档,其中仅包含3 个电子表格而不是 4 个。我非常感谢任何帮助。谢谢!
问题是
write_xlsx
(如错误代码所述)需要“数据帧或数据帧列表”。 NULL 不是数据帧。
library(tidyverse)
library(writexl)
path <- "~/Downloads"
list(DF, DF2, DF3) %>%
set_names(c("SpreadsheetA", "SpreadsheetB", "SpreadsheetC")) %>% # you can't give four names to three items, it just doesn't make any sense
map(~ split(.x, .x$Company)) %>%
transpose() %>%
map(~ .x[!map_lgl(.x, is.null)]) %>% # remove all NULL values
iwalk(~writexl::write_xlsx(.x, file.path(path, paste0("results_", .y, ".xlsx"))))