【问题标题】:R slide window through tibbleR通过小标题滑动窗口
【发布时间】:2020-08-08 12:01:03
【问题描述】:

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

想象一下我得到了这个数据框

(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 列建立一个df 索引一个滑动窗口,该窗口大小为n f 列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 列是否包含数组(嵌套值)。 我只需要一个基于滑动窗口的新数据框。

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

感谢任何帮助。

提前致谢

【问题讨论】:

    标签: r postgresql tidyverse sliding-window dbplyr


    【解决方案1】:

    我们可以按'b'分组,根据'a'的lead创建新列,删除NA和na.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())
    

    【讨论】:

      猜你喜欢
      • 2012-07-25
      • 2013-10-27
      • 2013-04-03
      • 2017-09-23
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      相关资源
      最近更新 更多