gpt4 book ai didi

r - 用dplyr对多个变量的所有可能组合进行分组

转载 作者:行者123 更新时间:2023-12-04 10:17:29 26 4
gpt4 key购买 nike

鉴于以下情况

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更新已改变了分组的工作方式,因此查找此问题颇具挑战性。

如果有比单独的数据集更好的方法,我想知道。

当我仅按一个变量分组时,就会遇到类似于以上工作的循环。

任何帮助都将不胜感激!谢谢!

最佳答案

这似乎令人困惑,并且可能存在一种使用do对其进行简化或修饰的方法,但是它可以工作。使用您的myDatamyGroups

results = lapply(myGroups, FUN = function(x) {
do.call(what = group_by_, args = c(list(myData), x)) %>%
summarise( n = length(var1),
avgVar1 = mean(var1))
}
)

> results[[1]]
Source: local data frame [3 x 3]

var2 n avgVar1
1 a 31 0.38929738
2 b 31 -0.07451717
3 c 38 -0.22522129

> results[[4]]
Source: local data frame [9 x 4]
Groups: var2

var2 var3 n avgVar1
1 a A 11 -0.1159160
2 a B 11 0.5663312
3 a C 9 0.7904056
4 b A 7 0.0856384
5 b B 13 0.1309756
6 b C 11 -0.4192895
7 c A 15 -0.2783099
8 c B 10 -0.1110877
9 c C 13 -0.2517602

> results[[7]]
# I won't paste them here, but it has all 27 rows, grouped by var2, var3 and var4.

由于 summarise不是数字,因此我将您的 var1调用更改为平均 var2

关于r - 用dplyr对多个变量的所有可能组合进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28992028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com