这是我正在使用的一些数据的最小工作示例.
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
Run Code Online (Sandbox Code Playgroud)
我想按"组"和"顺序"进行分组,然后找到滞后于"顺序"的值的平均值.理想情况下,这会生成一个看起来像的数据框
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
Run Code Online (Sandbox Code Playgroud)
我正在使用dplyr,group_by但我无法找到一种方法来使用mutate和mean()引用前一组.
任何帮助都会很精彩.
谢谢
这有点棘手,因为一旦你用一些变量对你的数据进行分组,你就无法轻易访问其他组的数据,除非你引用原始数据集(比如df$...再次使用,但是你再没有找到正确的组)对于).我可能有更多直接的方法,但这里有一个潜在的基于dplyr的方法来解决这个问题:
df %>%
group_by(group, order) %>% # group the data
summarise(mean = mean(value)) %>% # summarise with mean per group & order
mutate(mean = lag(mean)) %>% # get the previous group's mean
right_join(df) # join to original data
# Source: local data frame [10 x 4]
# Groups: group [?]
#
# group order mean value
# (dbl) (dbl) (dbl) (dbl)
# 1 700 1 NA 10
# 2 700 1 NA 9
# 3 700 1 NA 3
# 4 700 2 7.333333 6
# 5 700 2 7.333333 4
# 6 700 2 7.333333 8
# 7 700 2 7.333333 5
# 8 700 2 7.333333 1
# 9 700 2 7.333333 2
# 10 700 2 7.333333 7
Run Code Online (Sandbox Code Playgroud)