次の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|
510個の遺伝子IDのリストであるaccessions40
と呼ばれる別のデータフレームがあります。これはtable1
の最初の列のサブセットです。つまり、その値(510)はすべてtable1
(8083)の最初の列に含まれています。 accessions40
の頭が下に表示されます:
|V1 |
|:--------------|
|LdBPK_330360.1 |
|LdBPK_283000.1 |
|LdBPK_360210.1 |
|LdBPK_261550.1 |
|LdBPK_367320.1 |
|LdBPK_361420.1 |
私がしたいことは次のとおりです:最初の列(遺伝子ID)の下にtable2
にある値と他の5つの列からの対応する値のみを含む新しいaccessions40
を生成したいtable1
。つまり、table1
の値に基づいて、accessions40
の最初の列をサブセット化します。
%in%
を使用して論理ベクトルを取得し、それに基づいて 'table1'の行をsubset
できます。
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)
これを行うには多くの方法があります。 gene_ID
のtable1
列にあるV1
でaccession40
を見つける
table1[table1$gene_ID %in% accessions40$V1, ]
または、match
を使用することもできます
table1[match(accessions40$V1, table1$gene_ID), ]