【发布时间】:2019-02-15 22:02:52
【问题描述】:
我有两个数据框,一个名为 segments 包含数字“开始”和“停止”值
segments <- as.data.frame(
cbind(
rep(seq(1, 22, 1), 2),
seq(500000, 3000000, 57000),
seq(1000000, 3500000, 57000)
)
)
colnames(segments) <- c("chr", "segment.start", "segment.end")
还有一个叫做positions,它包含数值。
positions <- as.data.frame(cbind(1, seq(750000, 2000000, 56000)))
colnames(positions) <- c("chr", "pos")
我有兴趣计算segments 中“开始”和“停止”值之间的区域与positions 中的每个值重叠的行数,并将这些计数添加到positions 的新列中.
positions$count <- 0
我可以使用以下 for 循环获得这些计数,但在大型数据集上这非常慢。
for (n in 1:nrow(segments)) {
segment <- segments[n, ]
to.update <- which(
positions$pos >= segment$segment.start &
positions$pos <= segment$segment.end &
positions$chr == segment$chr
)
positions[to.update, "count"] <- positions[to.update, "count"] + 1
}
有谁知道如何在没有 for 循环的情况下获得这些计数?
【问题讨论】:
标签: r