【问题标题】:Mutate a grouped value (like a conditional mean) [duplicate]改变分组值(如条件平均值)[重复]
【发布时间】:2021-12-29 18:07:06
【问题描述】:

借助 dplyrR,您可以使用 group_bysummarize 来聚合数据。

例如:

mpg_cyl_carb <- mtcars %>% 
  group_by(cyl, carb) %>% 
  summarise(var1 = mean(mpg))

head(mpg_cyl_carb, 3)
A tibble: 3 x 3
Groups:   cyl [2]
    cyl  carb  var1
  <dbl> <dbl> <dbl>
1     4     1  27.6
2     4     2  25.9
3     6     1  19.8

这意味着当 cyl = 4 和 carb = 4 时,mpg 的平均值为 27.6。当 cyl = 6 且 carb = 1 时,平均值为 19.8,以此类推。

我想将这些聚合结果嵌套在原始数据框中。目前正在加入两个表来执行此操作:

> mtcars %>% 
+   left_join(mpg_cyl_carb, by = c("cyl", "carb")) %>% 
+   head(3) %>% 
+   select(mpg, cyl, carb, var1)
   mpg cyl carb  var1
1 21.0   6    4 19.75
2 21.0   6    4 19.75
3 22.8   4    1 27.58

但是有没有更简单的方法?变异的单个命令,例如:

> mtcars %>% 
+   mutate(. . .)

不是使用 if_else 的解决方案,因为它会增加复杂性。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    mutate 之前使用group_by 按组创建mean 列 - 而不是创建summarised 数据集,然后加入原始数据

    library(dplyr)
    mtcars %>% 
       group_by(cyl, carb) %>%
       mutate(var1 = mean(mpg)) %>%
       ungroup %>%
       head
    

    【讨论】:

    • 一般来说,group_by 后跟一个 summarise 命令,但这是一个很好的例子,其中 group_by + mutate 配合得很好。谢谢!
    猜你喜欢
    • 2017-04-16
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 2016-01-10
    • 2018-05-13
    • 1970-01-01
    相关资源
    最近更新 更多