2016-08-09 11 views
3

Ich habe die folgenden table1, die ein Datenrahmen aus 6 Spalten und 8083 Zeilen besteht. habenTeilmenge eine Spalte in Datenrahmen basierend auf einem anderen Datenrahmen/Liste

|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| 

ich einen anderen Datenrahmen, genannt accessions40, die eine Liste von 510 Gen-IDs ist: Im Folgenden werde ich den Kopf dieser table1 bin anzeigt. Es ist eine Teilmenge der ersten Spalte von table1, d.h. alle ihre Werte (510) sind in der ersten Spalte von table1 (8083) enthalten. Der Kopf des accessions40 ist unten dargestellt:

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

Was möchte ich tun, ist der folgende: Ich möchte ein neues table2 erzeugen, die unter der ersten Säule (Gen ID) enthält nur die aktuellen Werte in accessions40 und das entsprechende Werte aus den anderen fünf Spalten von table1. Mit anderen Worten, ich möchte die erste Spalte meiner table1 basierend auf den Werten accessions40 unterteilen.

Antwort

3

Wir verwenden %in% können einen logischen Vektor und subset die Zeilen bekommen von die 'table1' basiert darauf.

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

Eine bessere Möglichkeit wäre data.table

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

Oder filter von dplyr

library(dplyr) 
table1 %>% 
     filter(gene_ID %in% accessions40$V1) 
benutzen,
3

Es gibt viele Möglichkeiten, dies zu tun. Das Finden der gene_ID in table1 die accession40

in V1 Spalte vorhanden sind
table1[table1$gene_ID %in% accessions40$V1, ] 

Oder Sie können auch match

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