【问题标题】:How to add mean of a variable per group to a column in an elegant way?如何以优雅的方式将每组变量的平均值添加到列中?
【发布时间】:2023-03-09 18:37:01
【问题描述】:

我想将每月平均温度作为一列添加到空气质量数据集中。所以,我想要这样的东西:

  Ozone Solar.R  Wind  Temp Month  Day NEW COLUMN

  41     190   7.4    67     5     1  77.9
  36     118   8      72     5     2  77.9
  12     149  12.6    74     5     3  77.9
  18     313  11.5    62     5     4  77.9
  NA      NA  14.3    56     5     5  77.9
  28      NA  14.9    66     5     6  77.9

其中新列是 Temp/month 的平均值。因此,它将在 Month=5 的行中重复 Temp 的平均值,然后在 Month=6 等的行中重复 Temp 的另一个平均值。

我试过了:

 airquality %>% mutate(col = sapply(split(Temp, Month), min))

但我收到一条错误消息,说这会呈现 5 行,而我的数据框有 153 行。

如何优雅地解决这个问题?

【问题讨论】:

标签: r


【解决方案1】:

代替split,将group_by 与“月份”一起使用,并在mutate 中获取“温度”的minmin 返回一个长度为 1 的数值,该数值将被回收以填充每个组的整行

library(dplyr)
airquality %>%
    group_by(Month) %>%
    dplyr::mutate(col = min(Temp))

【讨论】:

  • 不幸的是,这会在整个列中打印相同的数字:(
  • @polarsandwich 请指定dplyr::mutate,因为您也加载了plyr 包,并且该包中有一个mutate,它掩盖了这种变异的行为。或者另一种选择是重启R只加载library(dplyr)然后运行脚本
猜你喜欢
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 2015-01-13
  • 2011-09-27
  • 2021-01-15
  • 2017-01-18
  • 2017-03-09
  • 1970-01-01
相关资源
最近更新 更多