r-一种快速扩展线性范围的方法



我有一个data.frame,其中每一行都是一个线性区间-特别是这些区间是染色体上的开始和结束坐标(下面的chr(:

df <- data.frame(chr = c("chr1","chr2","chr2","chr3"),
strand = c("+","+","-","-"),
start = c(34,23,67,51),
end = c(52,49,99,120),
stringsAsFactors = F)

染色体有两条链,因此形成strand列。

我想将这些间隔spread宽度为1,从而用position列替换startend列。到目前为止,我使用的是:

spread.df <- do.call(rbind,lapply(1:nrow(df),function(i)
data.frame(chr = df$chr[i], strand = df$strand[i], position = df$start[i]:df$end[i], strand = df$strand[i], stringsAsFactors = F)
))

但就我的间歇次数和它们的大小而言,这有点慢。所以我的问题是,是否有更快的替代方案。

map2将是快速

library(dplyr)
library(purrr)
library(tidyr)
df %>% 
transmute(chr, strand, position = map2(start, end, `:`)) %>% 
unnest(position)

或使用data.table

library(data.table)
setDT(df)[, .(position = start:end), .(chr, strand)]

相关内容

  • 没有找到相关文章

最新更新