【发布时间】:2015-05-13 13:29:11
【问题描述】:
给定如下情况
library(dplyr)
myData <- tbl_df(data.frame( var1 = rnorm(100),
var2 = letters[1:3] %>%
sample(100, replace = TRUE) %>%
factor(),
var3 = LETTERS[1:3] %>%
sample(100, replace = TRUE) %>%
factor(),
var4 = month.abb[1:3] %>%
sample(100, replace = TRUE) %>%
factor()))
我想对“myData”进行分组,最终找到按 var2、var3 和 var4 的所有可能组合进行分组的汇总数据。
我可以使用
创建一个列表,其中包含所有可能的变量组合作为字符值groupNames <- names(myData)[2:4]
myGroups <- Map(combn,
list(groupNames),
seq_along(groupNames),
simplify = FALSE) %>%
unlist(recursive = FALSE)
我的计划是使用 for() 循环为每个变量组合制作单独的数据集,类似于
### This Does Not Work
for (i in 1:length(myGroups)){
assign( myGroups[i]%>%
unlist() %>%
paste0(collapse = "")%>%
paste0("Data"),
myData %>%
group_by_(lapply(myGroups[[i]], as.symbol)) %>%
summarise( n = length(var1),
avgVar2 = var2 %>%
mean()))
}
诚然,我不太擅长列表,而且查找这个问题有点困难,因为 dpyr 更新已经改变了分组的工作方式。
如果有比单独的数据集更好的方法,我很想知道。
当我只按单个变量分组时,我得到了一个类似于上面的循环。
非常感谢任何和所有帮助!谢谢!
【问题讨论】:
-
我喜欢实现group_by(var1) and group_by(var2) and group_by(var1, var2)等的结果......我想把所有可能的数据分组三个变量的组合(大小为 1、2 和 3)。
-
对不起,这实际上很清楚,我没有仔细阅读就得出了关于您的目标的结论。
-
您可以使用 SAS 过程摘要轻松完成此操作。我从没想过我会打这些字。