如果行包含第二个表的列中的值,则过滤表以排除行

时间:2015-07-01 16:10:11

标签: r

我有一个主表超过608,000行(前7行如下所示)。这些对应于基因组中的位置以及Affymetrix(和dbSNP)给予它们的一个(或两个标识符)。

Affy SNP ID dbSNP RS ID Chromosome  Chromosome Start
Affx-26018273   rs10056215  5   163542505
Affx-26419011   rs10075407  5   2993645
Affx-18203133   rs10196277  2   149188375
Affx-8147963    rs1021996   12  51789617
Affx-30004198   rs10266230  7   152738841
Affx-26076228   rs10516050  5   168199301
Affx-8225327    rs1059513   12  57489709

然后我有另一个只有46行的表。我需要从主表中删除行,如果它们同时在第二个表中的46行中的一行中找到了染色体和染色体起始值。这是第二张表;它没有Affymetrix / dbSNP标识符。

1   5641055
1   8275761
1   18628674
1   119100982
1   155954058
1   213766407
2   85414016

如何过滤掉这些记录?

2 个答案:

答案 0 :(得分:3)

使用R,您可以删除Tab1中最后一列中显示在46行表Tab2的第二列中的数字的所有行

 Tab1 <- Tab1[-which(Tab1[,ncol(Tab1)] %in% Tab2[,2]),]

希望这有帮助。

答案 1 :(得分:2)

您可以使用anti_join软件包中的dplyr函数或该软件包的filter函数。

假设您的data.frame是内置mtcars,并且您希望从以下data.frame过滤出具有柱面值的汽车,即使用4或6个柱面:

dontuse <- data.frame(cyl = c(4,6), blah = c(1,2))

你可以跑:

anti_join(mtcars, dontuse)

mtcars %>%
  filter(! cyl %in% dontuse$cyl)

这两个返回行cyl不是4或6。

    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
1  18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
2  14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
3  16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
4  17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
5  15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
6  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
7  10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
8  14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
9  15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
10 15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
11 13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
12 19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
13 15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
14 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8