如何解决tp 传播线性范围的快速方法
我有一个 data.frame
,其中每一行都是一个线性区间 - 特别是这些区间是染色体上的开始和结束坐标(下面的 chr
):
df <- data.frame(chr = c("chr1","chr2","chr3"),strand = c("+","+","-","-"),start = c(34,23,67,51),end = c(52,49,99,120),stringsAsFactors = F)
一条染色体有两条链,因此有 strand
列。
我想将这些间隔 spread
的宽度设为 1,从而将 start
和 end
列替换为 position
列。到目前为止,我正在使用这个:
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],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)]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。