这是一份我正在处理的数据的最小工作示例。
我希望能按'group'和'order'分组,并找到'order'滞后的值的平均值。理想情况下,这将产生一个类似于以下数据框的结果:
我正在使用
任何帮助都将是很棒的。
谢谢。
set.seed(42)
value <- sample(1:10, 10)
group <- rep(700, each= 10)
order <- c(1,1,1,2,2,2,2,2,2,2)
df <- as.data.frame(cbind(value, group, order))
value group order
1 10 700 1
2 9 700 1
3 3 700 1
4 6 700 2
5 4 700 2
6 8 700 2
7 5 700 2
8 1 700 2
9 2 700 2
10 7 700 2
我希望能按'group'和'order'分组,并找到'order'滞后的值的平均值。理想情况下,这将产生一个类似于以下数据框的结果:
value group order mean
1 10 700 1 NA
2 9 700 1 NA
3 3 700 1 NA
4 6 700 2 7.33
5 4 700 2 7.33
6 8 700 2 7.33
7 5 700 2 7.33
8 1 700 2 7.33
9 2 700 2 7.33
10 7 700 2 7.33
我正在使用
dplyr
和group_by
,但我无法想出一种方法来使用mutate
和mean()
引用先前的分组。任何帮助都将是很棒的。
谢谢。
df[df[, mean(value), by=order][, v := shift(V1)], on="order", m := v, by=.EACHI]
。该语法会对数据框进行操作,通过按照"order"列分组并计算"value"列均值,然后给每个组中的元素添加一列“v”,其值为当前组中第一个元素的“V1”向上偏移一个位置的值。接着,对于每个“order”值,在原始数据框中匹配相应的行,并在这些匹配到的行中添加一列“m”,其值为对应行中“v”的值。 - Frank