web-dev-qa-db-fra.com

sous-ensemble d'une colonne dans un bloc de données basé sur un autre bloc / liste de données

J'ai les éléments suivants table1 qui est un bloc de données composé de 6 colonnes et 8083 lignes. Ci-dessous, j'affiche la tête de ce 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|

J'ai une autre trame de données, appelée accessions40 qui est une liste de 510 ID de gènes. Il s'agit d'un sous-ensemble de la première colonne de table1 c'est-à-dire que toutes ses valeurs (510) sont contenues dans la première colonne de table1 (8083). La tête de accessions40 s'affiche ci-dessous:

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

Ce que je veux faire est le suivant: je veux produire un nouveau table2 qui contient sous la première colonne (identifiant du gène) uniquement les valeurs présentes dans accessions40 et les valeurs correspondantes des cinq autres colonnes de table1. En d'autres termes, je veux sous-définir la première colonne de mon table1 basé sur les valeurs de accessions40.

14
BCArg

On peut utiliser %in% pour obtenir un vecteur logique et subset les lignes de la 'table1' en fonction de cela.

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

Une meilleure option serait data.table

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

Ou utilisez filter de dplyr

library(dplyr)
table1 %>%
      filter(gene_ID %in% accessions40$V1)
15
akrun

Il y a plusieurs façons de procéder. Trouver le gene_ID dans table1 qui sont présents dans V1 colonne de accession40

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

Ou vous pouvez également utiliser match

table1[match(accessions40$V1, table1$gene_ID), ]
6
Ronak Shah