如果另一列的值递增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
答案 0 :(得分:3)
您可以使用lag
和cumsum
创建帮助程序组变量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