我正在尝试基于分组因子来计算“滚动”摘要统计信息。是否存在基于(例如)有序因子的(重叠)组进行处理的好方法?

例如,假设我要按组计算val的总和

df <- data.frame(grp = c("a", "a", "b", "b", "c", "c", "c"),
                 val = rnorm(7))

对于基于grp的组,这很简单:
df %>% group_by(grp) %>% summarise(total = sum(val))

# result:
  grp   total
1   a  1.6388
2   b  0.7421
3   c  1.1707

但是,我要做的是为连续的组(“a”和“b”,然后是“b”和“c”,等等)计算“滚动”总和。所需的输出将是这样的:
  grp1 grp2   total
1    a    b  1.6388
2    b    c  0.7421

我在dplyr中无法执行此操作。特别是,我似乎无法弄清楚如何获得“重叠”组-上例中的“b”行应以两个输出组结尾。

最佳答案

试试lag:

df %>%
   group_by(grp) %>%
   arrange(grp) %>%
   summarise(total = sum(val)) %>%
   mutate(grp1 = lag(grp), grp2 = grp, total = total + lag(total)) %>%
   select(grp1, grp2, total) %>%
   na.omit

07-24 09:52
查看更多