基于另一个数据帧/列表在数据帧中子集一列

时间:2016-08-09 12:22:09

标签: r subset apply

我有以下table1,这是一个由6列和8083行组成的数据框。下面我显示了这个table1

的头部
|gene ID        |   prom_65|   prom_66|  amast_69|  amast_70|   p_value|
|:--------------|---------:|---------:|---------:|---------:|---------:|
|LdBPK_321470.1 |   24.7361|   25.2550|   31.2974|   45.4209| 0.2997430|
|LdBPK_251900.1 |  107.3580|  112.9870|   77.4182|   86.3211| 0.0367792|
|LdBPK_331430.1 |   72.0639|   86.1486|   68.5747|   77.8383| 0.2469355|
|LdBPK_100640.1 |   43.8766|   53.4004|   34.0255|   38.4038| 0.1299948|
|LdBPK_330360.1 | 2382.8700| 1871.9300| 2013.4200| 2482.0600| 0.8466225|
|LdBPK_090870.1 |   49.6488|   53.7134|   59.1175|   66.0931| 0.0843242|

我有另一个名为accessions40的数据框,它是510个基因ID的列表。它是table1的第一列的子集,即其所有值(510)都包含在table1的第一列(8083)中。 accessions40的头部显示在下方:

|V1             |
|:--------------|
|LdBPK_330360.1 |
|LdBPK_283000.1 |
|LdBPK_360210.1 |
|LdBPK_261550.1 |
|LdBPK_367320.1 |
|LdBPK_361420.1 |

我想要做的是以下内容:我想生成一个新的table2,它在第一列(基因ID)下只包含accessions40中存在的值和来自另一个的相应值来自table1的五列。换句话说,我想根据table1的值对accessions40的第一列进行子集化。

2 个答案:

答案 0 :(得分:11)

我们可以使用%in%来获取逻辑向量,并subset使用' table1'基于此。

subset(table1, gene_ID %in% accessions40$V1)

更好的选择是data.table

library(data.table)
setDT(table1)[gene_ID %chin% accessions40$V1]

或使用filter

中的dplyr
library(dplyr)
table1 %>%
      filter(gene_ID %in% accessions40$V1)

答案 1 :(得分:6)

有很多方法可以做到这一点。查找gene_IDtable1 V1中的accession40 table1[table1$gene_ID %in% accessions40$V1, ]

match

或者您也可以使用table1[match(accessions40$V1, table1$gene_ID), ]

dyld: Symbol not found: __TMps23ExpressibleByNilLiteral
  Referenced from: /Users/xxx/Library/Developer/CoreSimulator/Devices/F88A3B01-2A61-4A7E-89C0-110F1128DB1F/data/Containers/Bundle/Application/37E6A551-D3A6-41B6-938C-C7A203803FFC/TvTestApp01.app/Frameworks/TDatabases.framework/TDatabases
  Expected in: /Users/xxx/Library/Developer/CoreSimulator/Devices/F88A3B01-2A61-4A7E-89C0-110F1128DB1F/data/Containers/Bundle/Application/37E6A551-D3A6-41B6-938C-C7A203803FFC/TvTestApp01.app/Frameworks/libswiftCore.dylib
 in /Users/xxx/Library/Developer/CoreSimulator/Devices/F88A3B01-2A61-4A7E-89C0-110F1128DB1F/data/Containers/Bundle/Application/37E6A551-D3A6-41B6-938C-C7A203803FFC/TvTestApp01.app/Frameworks/TDatabases.framework/TDatabases