2017-10-18 86 views
1
library(dplyr) 
library(tidyr) 
library(forcats) 
library(readxl)  

使用來自forcats包gss_cat數據集我創建了一個分組和彙總數據框然後將數據通過婚姻和種族分裂變量(如果有更好的Tidyverse方法比在這裏使用lapply會更好)。如何導出每個分組的表在表的列表,以一個不同的Excel選項卡使用ReadXL和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選項卡。例如,按種族劃分,以便每個種族類別位於電子表格的不同選項卡上。

回答

0

首先,readxl不寫入Excel文件。請參閱readxl GitHub頁面上的the thread for issue 231。它看起來像writexl軟件包(尚未[尚未]是反轉的一部分),而不是建議。

其次,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嘗試創建的名稱的適用性不作檢查。如果您的數據包含maritalrace列中的非法字符,或者您在split()的參數sep參數中使用了非法字符,則操作將失敗。 (如果您不相信我,請嘗試使用sep = ':')。

相關問題