r - 按连续索引合并 data.frame 行

标签 r dataframe dplyr merge

我有一个线性间隔的data.frame,其中每个间隔也有一个数字索引:

df <- data.frame(id = c("id1","id20","id7","id12","id15"),
                 start = c(36, 41, 216, 234, 300),
                 end = c(21, 112, 263, 269, 340),
                 index = c(11, 12, 28, 29, 33))

其中dfindex升序排序。

我想将索引连续的每组行合并为一行,以便它们的 id;, start 是集合的最小 startend 是集合的最大 endindex 是也是集合的最大索引

因此,对于上面的示例,合并后的 data.frame 将是:

merged.df <- data.frame(id = c("id1;id20","id7;id12","id15"),
                        start = c(36, 216, 300),
                        end = c(112, 269, 340),
                        index = c(12, 29, 33))

有什么想法吗?

最佳答案

您可以使用cumsum(c(TRUE, diff(index) != 1))以确定索引的连续位置。

library(dplyr)

df %>%
  group_by(grp = cumsum(c(TRUE, diff(index) != 1))) %>%
  summarise(id = paste(id, collapse = ";"),
            start = min(start), end = max(end),
            index = last(index)) %>%
  select(-grp)

# # A tibble: 3 × 4
#   id       start   end index
#   <chr>    <dbl> <dbl> <dbl>
# 1 id1;id20    36   112    12
# 2 id7;id12   216   269    29
# 3 id15       300   340    33

关于r - 按连续索引合并 data.frame 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72823674/

相关文章:

r - %like% 在 r 中有多个模式

r - dplyr:汇总data.frame以获得最高值和最低值

r - 获取每一行的最后一个非空列的值

r - 尝试下载 Google 趋势数据但日期参数被忽略?

r - 使用 embrace {{ arg }} 在 dplyr 中选择负值的问题

R featurePlot 返回 NULL

r - 如何附加到R中的现有文件而不覆盖它?

R Dataframe : aggregating strings within column, 跨行,按组

python - 在 pandas 数据框列上使用 rsplit 根据分隔符的第二个实例进行分隔

python - Pandas ,连续对特定范围的单元格求和