【问题标题】:Conditional count and mean by grouped data without filter or left_join没有过滤器或left_join的分组数据的条件计数和平均值
【发布时间】:2018-12-04 09:57:54
【问题描述】:

如何在不使用 dplyr 过滤的情况下通过分组数据计算条件计数和平均值?我既不想使用过滤器缩小数据集,也不想 left_join 数据以获取原始大小(加长)的数据集。这可能吗?

这是一个案例:

mtcars %>% filter(cyl>4, gear% group_by(gear, carb, am) %>% mutate(avg_mpg = mean(mpg, na.rm = T), cnt = n( ))

不使用filter或left_join如何得到以上结果?

【问题讨论】:

  • 你的意思是mtcars %>% group_by(gear, carb, am) %>% mutate(avg_mpg = mean(mpg[cyl>4 & gear< 5], na.rm = TRUE))
  • @ckrun 您能否在建议的答案中包含计数?
  • 是的,mtcars %>% group_by(gear, carb, am) %>% mutate(avg_mpg = mean(mpg[cyl>4 & gear< 5], na.rm = TRUE), cnt= n())
  • 这是你想要的吗?\
  • 在这种情况下,cnt = sum(cyl>4 & gear <5))

标签: r dplyr tidyverse


【解决方案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”列只是因为我们多次使用条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    相关资源
    最近更新 更多