我正在尝试使用数据帧中一个变量(染色体位置)的范围列表来过滤大型信号强度数据帧。该列表总共有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]
提前谢谢!
答案 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]