2016-10-02 2 views
-2

약 25 개의 데이터베이스가 있습니다. 이제 일부 테이블의 첫 번째 열에 겹침 부분을 찾아 추출하고 싶습니다. 또한 얼마나 많은 중복이 있고 얼마나 많은 퍼센트인지 알고 싶습니다. 출력은 테이블이어야합니다.중첩 비율 R %

표 :

Gen   Estimate Std. Error p-Value 
1007_s_at -0.159699 0.07834  0.04265 
1053_at  -0.174647 0.064535  0.0098976 
121_at  0.1765678 0.05116854 0.0000657 

표 2 :

Gen  Estimate  Std. Error p-Value 
1494_f_at 0.2222467 0.0553653 0.0075838 
121_at  0.873683  0.00898737 0.0088378 
1316_at 0.098764  0.098456  0.048899 
1007_s_at 0.89723  0.5675389 0.00007865 

표 3 : 여기에 일례이기

Gen  Estimate  Std.Error p-Value 
1007_s_at 0.0864567 0.8931278 0.005542 
121_at  0.2378590 0.0236586 0.00005667 
1494_f_at 0.4597023 0.9875357 0.0091234 

는 결과가 같아야

Gen  
1007_s_at  
121_at 

Overlapping rate: 20%  

foverlaps 함수를 시도했지만 작동하지 않았습니다.

누군가 도와 주길 바랍니다. 감사!

는 업데이트

:

이 모든 테이블의 첫 번째 열을 병합 한 후 내 목록 될 것 (매우 긴 것 - 그래서 이것은 단지 짧은 예 46.000 다른 genes-의 혼합 약 200.000 행입니다) :

gene A 
gene B 
gene C 
gene D 
gene A 
gene E 
gene F 
gene A 
gene C 
gene A 
gene B 
gene D 
gene A 
gene E 
gene B 
gene A 
gene C 

그래서 우리가 6 배 유전자 A, 3 회 유전자 B 3 회 유전자 C, 2 회 유전자 D, 2 배의 유전자 E 및 1 회 유전자 E. 전폐 우리 17 개 유전자를 가지고있다. 그것은 유전자 A가 35 %, 유전자 B가 18 %, 유전자 C가 18 %, 유전자 D와 유전자 E가 각각 12 %, 유전자 E가 5 %입니다. 그래서 제가 찾고있는 것입니다. 어쩌면 그렇게 생각하지 않을 수도 있습니다.

답변

1

이 경우 duplicated() 함수를 사용할 수 있습니다.

하지만 먼저 첫 번째 열의 모든 문자열을 하나의 벡터로 병합해야합니다. 단순히 c() 기능 만 사용하면됩니다. 테이블이 이미 하나의 목록에 있거나 하나의 데이터 프레임에 있으면 더 쉽습니다. 루프를 사용할 수도 있고, 객체의 이름에 따라 많은 것을 쓸 필요가 없습니다. 최소한의 작업 예제가 있으면 유용 할 것입니다.

merge.first <- c(table1[,1], table2[,1], table3[,1],....) 

당신은 중복 검색보다 : 당신이 sum() 기능을 사용하는 중복 계산 수에 대한

names(table(merge.first[position.dup]) 

: 두 개 이상의 중복이

position.dup <- duplicated(merge.first) 

단지의 경우 :

sum(position.dup) 

그리고 어떻게 백분율을 계산합니까?이 의미를 이해하지 못합니다. 귀하의 예에서는 10 개의 행으로 2 개의 겹치는 부분이 있는데, 그 비율은 20 %가 아니라 28 %입니다. 그래서 불행히도 당신이 필요로하는 것을 모릅니다.

편집 : 지금 나는 당신처럼 같은 결과를 가지고

> merge.vector 
[1] "A" "B" "C" "D" "A" "E" "F" "A" "C" "A" "B" 
[12] "D" "A" "E" "B" "A" "C" 
> round((table(merge.vector)/length(merge.vector)) * 100) 
merge.vector 
A B C D E F 
35 18 18 12 12 6 

이 줄 당신이 원하는 것을 할 :

round((table(merge.vector)/length(merge.vector)) * 100) 
+0

감사합니다! 내 다른 테이블의 첫 번째 열을 병합하면 많은 중복 된 유전자가 있지만 어쩌면 중복되지 않을 수도 있습니다. 예를 들어 나는 300 배의 유전자 A (x %를 만든다)와 나는 단지 20 배의 유전자 B (y %를 만든다)를 가지고있다. 그리고 유전자 C는 오직 한 번만 발견됩니다. 중복이 없으므로 0 %가됩니다. 모든 종류의 유전자의 비율을 알고 싶습니다. @and –

+0

이 점을 보여주는 몇 가지 데이터를 게시 할 수 있습니까? 훨씬 더 쉽게 지원할 수 있습니다. –

+0

예제가 충분하기를 바랍니다 :) @and –