我有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也是集合的最大index.

因此,对于上述示例,得到的合并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相关问答推荐

如何调整曲线图中的y轴标签?

R中的时间序列(Ts)函数计数不正确

我正在努力用R计算数据集中的中值逐步距离

LOF中的插图短文字幕

R中的类别比较

为什么在写入CSV文件时Purrr::Pwalk不起作用

我是否可以使用多个变异项来构建顺序列(标记多个问题)

基于R中的辅助向量中的值有条件地连接向量中的字符串

R-找出存在其他变量的各种大小的所有组合

按组使用dummy r获取高于标准的行的平均值

将数据从一列转换为按组累计计数的单个虚拟变量

位置_道奇在geom_point图中不躲避

为什么R列名称忽略具有指定名称的向量,而只关注索引?

从字符串列中的向量中查找第一个匹配的单词

如何使用ggsurvfit包更改风险表中的标签名称?

残差与拟合图上标记点的故障排除

对一个列表中另一个列表中的元素进行计数

曲线图矩形顶点连接在错误的&q;一侧

如何在Ubuntu上更改R中的区域设置

按分组和最接近的整数值合并