подмножество столбца в фрейме данных на основе другого фрейма / списка данных

У меня есть следующее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 идентификаторов генов. Это подмножество первого столбца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 который содержит под первым столбцом (идентификатор гена) только значения, присутствующие вaccessions40 и соответствующие значения из других пяти столбцов изtable1, Другими словами, я хочу разместить первый столбец моегоtable1 на основе значенийaccessions40.

Ответы на вопрос(2)

Решение Вопроса

Мы можем использовать%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)
 akrun29 мая 2019 г., 00:42
@RanonKahn Используйте отрицание (! то естьsetDT(table)[!gene_ID %chin% accessions40$V1]
 RanonKahn29 мая 2019 г., 00:13
Как отфильтровать значения в gene_ID, которых нет в accession40 $ V1?
 RanonKahn30 мая 2019 г., 19:45
Я использовал знак отрицания в неправильном месте и столкнулся с ошибкой. Спасибо!

Есть много способов сделать это. Нахождениеgene_ID вtable1 которые присутствуют вV1 столбецaccession40

table1[table1$gene_ID %in% accessions40$V1, ]

Или вы также можете использоватьmatch

table1[match(accessions40$V1, table1$gene_ID), ]

Ваш ответ на вопрос