我有以下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|
Run Code Online (Sandbox Code Playgroud)
我有另一个数据框,称为accessions40510基因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 |
Run Code Online (Sandbox Code Playgroud)
我想要做的是以下内容:我想生成一个新的table2,它包含第一列(基因ID)下只包含的值accessions40和来自其他五列的相应值table1.换句话说,我希望table1根据值的值对我的第一列进行子集化accessions40.
akr*_*run 20
我们可以使用它%in%来获取逻辑向量和subset'table1'的行.
subset(table1, gene_ID %in% accessions40$V1)
Run Code Online (Sandbox Code Playgroud)
一个更好的选择是 data.table
library(data.table)
setDT(table1)[gene_ID %chin% accessions40$V1]
Run Code Online (Sandbox Code Playgroud)
或者使用filter从dplyr
library(dplyr)
table1 %>%
filter(gene_ID %in% accessions40$V1)
Run Code Online (Sandbox Code Playgroud)
有很多方法可以做到这一点.找到gene_ID在table1其存在于V1柱accession40
table1[table1$gene_ID %in% accessions40$V1, ]
Run Code Online (Sandbox Code Playgroud)
或者你也可以使用 match
table1[match(accessions40$V1, table1$gene_ID), ]
Run Code Online (Sandbox Code Playgroud)