条件计数和没有过滤器或left_join的分组数据的平均值

时间:2018-06-25 18:44:05

标签: r dplyr tidyverse

如何使用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的情况下获得以上结果?

1 个答案:

答案 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”列的原因仅在于我们多次使用条件。