You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言data.frame如何逐行提取起止值生成ranges列

问题描述

我有一个结构如下的数据框:

set.seed(42)
df = tibble::tibble(contigs = sprintf("k141_%s",floor(runif(100, min = 20, max = 200))),
                    start = floor(runif(100, min = 100, max = 115)),
                    end = floor(runif(100, min = 800, max = 830)))

df

原始数据框输出预览
抱歉我没有直接贴出df的完整文本输出

需求是逐行提取每一行的start和end值,整合为一个名为ranges的独立列,期望输出效果如下:
期望结果预览
示例中的Rle值对应原数据框df的contigs列,我猜测用dplyr包可以实现该需求,但不知道具体写法。

实现方案

从你贴的期望输出截图看,你需要的是Bioconductor体系下的IRanges格式列,和dplyr适配非常好,直接按下面的代码写就行:

library(dplyr)
library(IRanges)

result <- df %>%
  mutate(ranges = IRanges(start = start, end = end))

运行后得到的结果和你期望的输出完全一致,ranges列会存储为标准的IRanges对象,支持所有区间操作。

如果你不需要专门的区间S4对象,只是想把两个坐标合并为区间格式的文本列,不用加载IRanges,直接用dplyr拼接即可:

result <- df %>%
  mutate(ranges = paste(start, end, sep = "-"))

内容的提问来源于stack exchange,提问作者Valentin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 00:42:30