2016-08-09 4 views
3

다음과 같은은 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의 머리 아래에 표시된다 : I은 첫 번째 열 (유전자 ID)에 따라 포함하는 새로운 table2를 생성 할 accessions40 존재 만 값과 대응 : 할 원하는 다음이다

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

다른 5 개 열의 값은 table1입니다. 즉, accessions40의 값에 따라 table1의 첫 번째 열을 부분 집합으로 만들려고합니다.

답변

3

을 사용할 수 있습니다 그걸 바탕으로 'table1'.

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

더 나은 옵션은 data.table

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

수 또는 dplyr

library(dplyr) 
table1 %>% 
     filter(gene_ID %in% accessions40$V1) 
에서 filter을 사용
3

이렇게하는 방법에는 여러 가지가 있습니다. accession40

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

또는 V1 열에 존재하는 table1에서 gene_ID 찾기 당신은 또한 우리는 논리적 벡터와 subset 행의를 얻을 수 %in%을 사용할 수 있습니다 match

table1[match(accessions40$V1, table1$gene_ID), ] 
관련 문제