R 滑动 window 通过 tibble

R slide window through tibble

我有一个简单的问题,但我无法找到解决方案。 另外,我没有找到我理解的答案。

假设我得到了这个数据框

(ts <- tibble(
+   a = LETTERS[1:10],
+   b = c(rep(1, 5), rep(2,5))
+ ))
# A tibble: 10 x 2
   a         b
   <chr> <dbl>
 1 A         1
 2 B         1
 3 C         1
 4 D         1
 5 E         1
 6 F         2
 7 G         2
 8 H         2
 9 I         2
10 J         2

我要的很简单。我想用 b 列索引一个滑动 window 的 df,它的大小为 a.

输出可能是这样的:

# A tibble: 8 x 2
      b a    
  <dbl> <chr>
1     1 A B  
2     1 B C  
3     1 C D  
4     1 D E  
5     2 F G  
6     2 G H  
7     2 H I  
8     2 I J  

我不关心 a 列是否包含数组(嵌套值)。 我只需要一个基于滑动 window.

的新数据框

由于此操作将在关系数据库中 运行 我想要一个与 DBI-PostgresSQL 兼容的函数。

感谢任何帮助。

提前致谢

我们可以按 'b' 分组,根据 'a' 的 lead 创建新列,删除 NAna.omit

library(dplyr)
ts %>% 
    group_by(b) %>% 
    mutate(a2 = lead(a)) %>% 
    ungroup %>%
    na.omit %>%
    select(b, everything())
# A tibble: 8 x 3
#      b a     a2   
#  <dbl> <chr> <chr>
#1     1 A     B    
#2     1 B     C    
#3     1 C     D    
#4     1 D     E    
#5     2 F     G    
#6     2 G     H    
#7     2 H     I    
#8     2 I     J    

如果 lead 不起作用,则只需删除第一个元素,在 mutate 步骤的末尾附加 NA

ts %>%  
     group_by(b) %>% 
     mutate(a2 = c(a[-1], NA)) %>%
     ungroup %>% 
     na.omit %>% 
     select(b, everything())