1
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 文件。更具体地说,我想将列表中的选择表导出到单独的 Excel 选项卡。例如,按种族划分,以便每个种族类别位于电子表格的不同选项卡上。

4

1 回答 1

0

一、readxl不写Excel文件。请参阅readxl GitHub 页面上问题 231 的线程。看起来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尝试创建的工作表名称的适用性。如果您的数据在maritalorrace列中包含非法字符,或者您在 to 的sep参数中使用了非法字符split(),则操作将失败。sep = ':'(如果您不相信我,请尝试使用。)

于 2017-11-05T01:30:56.193 回答