如何使用dplyr在不使用过滤器的情况下按分组数据计算条件计数和平均值?我既不想使用过滤器缩小数据集,也不想left_join数据以获取原始大小(加长)的数据集。有可能吗?
这是一个例子:
mtcars%>%过滤器(cyl> 4,gear <5)%>%group_by(gear,carb,am)%>%mutate(avg_mpg = mean(mpg,na.rm = T),cnt = n( ))
如何在不使用filter或left_join的情况下获得以上结果?
答案 0 :(得分:1)
我们可以将条件创建为逻辑列,并使用该条件按组对'mpg'进行子集化以获得mean
值,类似地,将'cnt'计算为逻辑的sum
向量
mtcars %>%
mutate(ind = cyl > 4 & gear < 5) %>%
group_by(gear, carb, am) %>%
mutate(avg_mpg = mean(mpg[ind], na.rm= TRUE),
cnt = sum(ind)) %>%
select(-ind)
注意:创建“ ind”列的原因仅在于我们多次使用条件。