使用dplyr查找上一组分组数据的平均值

Dar*_*elf 3 r dplyr

这是我正在使用的一些数据的最小工作示例.

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但我无法找到一种方法来使用mutatemean()引用前一组.

任何帮助都会很精彩.

谢谢

tal*_*lat 6

这有点棘手,因为一旦你用一些变量对你的数据进行分组,你就无法轻易访问其他组的数据,除非你引用原始数据集(比如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)

  • 一个data.table analogue(我认为):`df [df [,mean(value),by = order] [,v:= shift(V1)],on ="order",m:= v,by =. EACHI]` (3认同)