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
相关产品推荐
相关产品推荐

