如果另一列中的值在R中是连续的,则追加列的值

时间:2017-10-04 18:53:28

标签: r dplyr aggregate

如果另一列的值递增1,我正在寻找一种方便的方法来连接列的值。 我的数据框

      st        row_index
 1    alpha        2
 2    beta         7
 3    gamma       11
 4    delta       12
 5    zero        15
 6    one         16
 7    two         17

目标数据框

    st             row_index
1   alpha              2
2   beta               7
3   gammadelta        11
4   zero one two      15

2 个答案:

答案 0 :(得分:3)

您可以使用lagcumsum创建帮助程序组变量g,然后按此变量进行汇总; row_index - lag(row_index, default=0) != 1检查当前 row_index 与前一个之间的差异,如果它与1不同,则返回 TRUE (使用default=0删除NA通过lag),结合cumsum,它为每个连续的行块提供唯一ID,其中row_index的差异为1:

df %>% 
    group_by(g = cumsum(row_index - lag(row_index, default=0) != 1)) %>% 
    summarise(st = paste(st, collapse = " "), row_index = first(row_index)) %>% 
    select(-g)

# A tibble: 4 x 2
#            st row_index
#         <chr>     <int>
#1        alpha         2
#2         beta         7
#3  gamma delta        11
#4 zero one two        15

答案 1 :(得分:0)

以下是data.table的选项。由row_index&#39;的累积差异总和组合而成。不是1,paste&#39; st&#39;在一起并获取&#39; row_index&#39;

的第一个值
library(data.table)
setDT(df1)[, .(st = paste(st, collapse= ' '),
     row_index = row_index[1]), .(grp = cumsum(c(TRUE, diff(row_index) != 1)))
       ][, .(st, row_index)]
#             st row_index
#1:        alpha         2
#2:         beta         7
#3:  gamma delta        11
#4: zero one two        15