R-子数据帧-检查值是否在范围内

时间:2019-07-30 07:18:15

标签: r dataframe subset

我有以下两个数据帧

d1 <- data.frame(chr = c("chr1","chr2","chr2"), pos = c(11, 15,21), type = c("type1","type2","type1"))

    > d1
    chr pos  type
 1 chr1  11 type1
 2 chr2  15 type2
 3 chr2  21 type1


d2 <- data.frame(chr = c("chr1","chr2","chr4"), start = c(10, 15,30), stop = c(13,20,40))

   > d2
   chr start stop
1 chr1    10   13
2 chr2    15   20
3 chr4    30   40

我想在两个条件下将d1子集化:

  • 保留所有'type'==“ type1”的行(我知道该怎么做)
  • 保留所有“ chr”与d2中的任何行相匹配且“ pos”位于d2中该行的“ start”和“ stop”值之间的所有行

在这种情况下,结果d3将仅包含d1的第1行:

    > d3
    chr pos  type
 1 chr1  11 type1

我会这样开始:

 d3 <- subset(d1, d1$type == "type1" & ...)

1 个答案:

答案 0 :(得分:1)

我们可以将所有条件加到一个逻辑条件子集中

d1[d1$type=="type1" & d1$chr %in% d2$chr & d1$pos >= d2$start & d1$pos <= d2$stop, ]

#   chr pos  type
#1 chr1  11 type1