如何在一个具有多个选项卡的excel中输出多个表

  • 本文关键字:选项 excel 输出 一个 r
  • 更新时间 :
  • 英文 :


我有一个数据框架:

df <- data.frame(subgroup= c(1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3),
group_num=(2,2,5,5,10,21,18,17,16,22,20,25,21,30,29,20),
state= c(NJ,NJ,NJ,VT,VT,VT,VT,DC,DC,DC,DC,IL,IL,IL,IL),
date= c(2010-01-01,2010-01-01,2010-01-01,2010-01-01,2010-01-02,2010-01-02,2010-01-02,2010-01-02,2010-02-03,2010-02-03,2010-02-03,2010-02-03,2010-03-05,2010-03-05,2010-03-05,2010-03-05),
value = c(12,7,6,9,15,7,6,9,18,5,6,3,20,5,5,6)
)

我想在一个excel中输出每个唯一的group_num到单独的选项卡,我在下面尝试过:

map(unique(df$group_num),function(x) 
write.xlsx(df%>% 
filter(group_num == !!sym(x)) ,
file.path(test ,"TEST.xlsx"),
sheetName=x )
)

But I got error:

Error in `.fun()`:
! Problem while computing `..1 = group_num== `2``.
Caused by error in `mask$eval_all_filter()`:
! object '2' not found
Backtrace:
1. purrr::map(...)
6. tidylog::filter(., metric_num == !!sym(x))
7. tidylog:::log_filter(...)
9. dplyr:::filter.data.frame(.data, ...)
10. dplyr:::filter_rows(.data, ..., caller_env = caller_env())
11. dplyr:::filter_eval(dots, mask = mask, error_call = error_call)
13. mask$eval_all_filter(dots, env_filter)

如果我尝试group_num == x,输出excel将只具有最后一个group_num。

如果我想在这个map函数上添加更多的表,我该怎么做?

您可以将数据组排列到命名列表中…

library(purrr)
library(dplyr)
library(openxlsx)
ls1 <- map(unique(df1$group_num), ~filter(df1, group_num == .))
names(ls1) <- unique(df1$group_num)
#this assumes that directory `test` exists
write.xlsx(ls1, file.path("test/TEST.xlsx"))

数据
df1 <- data.frame(subgroup= c(1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3),
group_num=c(2,2,5,5,10,21,18,17,16,22,20,25,21,30,29,20),
state = rep(c("NJ", "VT", "DC", "IL"), each = 4),
date= c(2010-01-01,2010-01-01,2010-01-01,2010-01-01,2010-01-02,2010-01-02,2010-01-02,2010-01-02,2010-02-03,2010-02-03,2010-02-03,2010-02-03,2010-03-05,2010-03-05,2010-03-05,2010-03-05),
value = c(12,7,6,9,15,7,6,9,18,5,6,3,20,5,5,6)
)

最新更新