dplyr基于过滤,分组和汇总计算新列

时间:2020-11-06 19:47:07

标签: r dplyr

鉴于下面的foo,我试图基于y值的子集的平均值计算三组id的{​​{1}}异常。对于dplyr语法,我看不到前进的方向,但必须有一种简单的方法。

也就是说,我想要一种计算新列y的方法,对于每个yAnom来说,y-mean(y)的值就是y的{​​{1}}。 Base R解决方案:

x<=5

帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

也许类似以下内容:

foo %>%
  # new column with only the values you want to average over, and NA elsewhere
  mutate(y_when_x_under_5 = ifelse(x <= 5, y, NA)) %>%
  # new column with mean for each group
  group_by(id) %>%
  mutate(y_mean = mean(y_when_x_under_5, na.rm = TRUE)) %>%
  # required calculation
  mutate(yAnom = y - y_mean)