如何使用 ReadXL 和 Tidyverse 将 Table 列表中的每个分组 Table 导出到不同的 Excel 选项卡
How to Export Each Grouped Table in a List of Tables to a Different Excel Tab Using ReadXL and Tidyverse
library(dplyr)
library(tidyr)
library(forcats)
library(readxl)
使用 forcats 包中的 gss_cat 数据集,我创建了一个分组和汇总的数据框,然后将数据按婚姻和种族变量拆分(如果有比在这里使用 lapply 更好的 tidyverse 方法将是一个很好的奖励)。
Survey<-gss_cat%>%
select(marital,race,relig,denom)%>%
group_by(marital,race,relig,denom)%>%
summarise(Count=n())%>%
mutate(Perc=paste0(round(100*Count/sum(Count),2),"%"))%>%
drop_na()
Survey%>%split(.$marital)%>%
lapply(function(x) split(x,x$race))
但是我一直在尝试使用 readxl 将最终列表导出到 Excel 文件。更具体地说,我想导出列表中的 select 个表以分隔 Excel 个选项卡。例如,按种族划分,以便每个种族类别位于电子表格中的不同选项卡上。
首先,readxl
不写Excel文件。推荐使用 the thread for issue 231 on the readxl GitHub page. It looks like the writexl
包([还]不是 tidyverse 的一部分)。
其次,split()
可以将列表作为参数。
list_of_dfs <- survey %>% split(list(.$marital, .$race), sep='_')
把它放在一起,假设你已经安装了 writexl
:
require(tidyverse)
require(forcats)
require(writexl)
survey <-
gss_cat %>%
select(marital, race, relig, denom) %>%
group_by(marital, race, relig, denom) %>%
summarise(Count=n()) %>%
mutate(Perc=paste0(round(100*Count/sum(Count), 2), "%")) %>%
drop_na()
list_of_dfs <- survey %>% split(list(.$marital, .$race), sep='_')
write_xlsx(list_of_dfs, 'out.xlsx')
请注意,没有检查 write_xlsx
尝试创建的工作表名称的适用性。如果您的数据在 marital
或 race
列中包含非法字符,或者如果您在 split()
的 sep
参数中使用了非法字符,则操作将失败。 (如果您不相信我,请尝试使用 sep = ':'
。)
library(dplyr)
library(tidyr)
library(forcats)
library(readxl)
使用 forcats 包中的 gss_cat 数据集,我创建了一个分组和汇总的数据框,然后将数据按婚姻和种族变量拆分(如果有比在这里使用 lapply 更好的 tidyverse 方法将是一个很好的奖励)。
Survey<-gss_cat%>%
select(marital,race,relig,denom)%>%
group_by(marital,race,relig,denom)%>%
summarise(Count=n())%>%
mutate(Perc=paste0(round(100*Count/sum(Count),2),"%"))%>%
drop_na()
Survey%>%split(.$marital)%>%
lapply(function(x) split(x,x$race))
但是我一直在尝试使用 readxl 将最终列表导出到 Excel 文件。更具体地说,我想导出列表中的 select 个表以分隔 Excel 个选项卡。例如,按种族划分,以便每个种族类别位于电子表格中的不同选项卡上。
首先,readxl
不写Excel文件。推荐使用 the thread for issue 231 on the readxl GitHub page. It looks like the writexl
包([还]不是 tidyverse 的一部分)。
其次,split()
可以将列表作为参数。
list_of_dfs <- survey %>% split(list(.$marital, .$race), sep='_')
把它放在一起,假设你已经安装了 writexl
:
require(tidyverse)
require(forcats)
require(writexl)
survey <-
gss_cat %>%
select(marital, race, relig, denom) %>%
group_by(marital, race, relig, denom) %>%
summarise(Count=n()) %>%
mutate(Perc=paste0(round(100*Count/sum(Count), 2), "%")) %>%
drop_na()
list_of_dfs <- survey %>% split(list(.$marital, .$race), sep='_')
write_xlsx(list_of_dfs, 'out.xlsx')
请注意,没有检查 write_xlsx
尝试创建的工作表名称的适用性。如果您的数据在 marital
或 race
列中包含非法字符,或者如果您在 split()
的 sep
参数中使用了非法字符,则操作将失败。 (如果您不相信我,请尝试使用 sep = ':'
。)