根据另一个数据帧中的列删除行

时间:2016-07-25 17:58:52

标签: r dataframe subset

有没有办法根据另一个数据框的列从数据框中删除行?

例如,Dataframe 1:

        Gene CHROM    POS REF ALT N_INFORMATIVE     Test       Beta       SE
AAA     1  15211   T   G          1481  1:15211 -0.0599805 0.112445
LLL     1 762061   T   A          1481 1:762061  0.2144100 0.427085
CCC     1 762109   C   T          1481 1:762109  0.2847510 0.204255
DDD     1 762273   G   A          1481 1:762273  0.0443946 0.119924

Dataframe 2(仅1列):

Genes
AAA
BBB
CCC
DDD
EEE
FFF

在这种情况下,我想扫描Dataframe 1,第1列以查找与Dataframe 2的任何匹配,并删除匹配的行。

他们需要完全匹配,结果如下:

        Gene CHROM    POS REF ALT N_INFORMATIVE     Test       Beta       SE
LLL     1 762061   T   A          1481 1:762061  0.2144100 0.427085

我尝试过这种变体,但它没有奏效:

NewDataframe <-!(Dataframe1$Gene==Dataframe2$Genes)

感谢阅读。

1 个答案:

答案 0 :(得分:4)

使用%in%识别第一个数据帧中哪些元素未包含在第二个数据帧中,然后将生成的逻辑向量传递给第一个数据帧到子集。

dat1 <- data.frame(id = LETTERS[1:10], stringsAsFactors = FALSE)
dat2 <- data.frame(id = c("B", "D"), stringsAsFactors = FALSE)
dat1[!dat1$id %in% dat2$id, , drop = FALSE]
#    id
# 1   A
# 3   C
# 5   E
# 6   F
# 7   G
# 8   H
# 9   I
# 10  J