如何使用变量的多个范围的列表过滤数据框

时间:2019-04-18 15:03:52

标签: r

我正在尝试使用数据帧中一个变量(染色体位置)的范围列表来过滤大型信号强度数据帧。该列表总共有256个范围,包括开始和结束位置。我可以使用单个范围成功过滤数据框,但似乎无法使它遍历整个数据框。

DT是原始信号强度数据帧(SNP,Chr,位置,强度比),PR是两列数据帧,具有开始和结束位置:

Chr   Start    End
1     130104   207101
1     1423247  4459324
1     6543121  7924836

此行代码可从单个范围提取数据:

test <- DT %>% filter(Chr %in% ("1")) %>% filter(Position %in% c(PR$Start[1]:PR$End[1]))

这不起作用:

for (i in 1:nrow(PR)){
    help <- DT %>% filter(Chr %in% ("1")) %>% filter(Position %in% c(PR$Start[i]:PR$End[i]))
  }

上面的代码生成的数据帧带有随机选择的数据,这些数据与位置范围不符。

这也不起作用:

range = data.table(start=PR$Start,end=PR$End)
x <- DT[Position %inrange% range]

提前谢谢!

1 个答案:

答案 0 :(得分:0)

您的data.table解决方案为我工作。用我制作的数据,这对您有用吗?

dt <- data.table(id = 1:100, var=runif(100))
ranges <- data.table(start=c(20,50,70), end=c(30,55,72))
dt[id %inrange% ranges]