2017-03-10 4 views
1

거대한 데이터 세트가 있습니다. 데이터는 105000 개의 마커가있는 371 개의 유전자형 (gwas로 시작)으로 구성됩니다. 105000 마커를 사용하여 특정 수학 방정식으로 R의 유전자형 사이에 행렬이 있어야합니다. 다음과 같은 데이터 형식특정 수학 방정식으로 행렬을 만들려면 어떻게해야합니까?

markers gwas_100 gwas_101 gwas_102 gwas_103 
S1_147748 NA NA NA NA 
S1_239131 0.67385 0.67385 0.67385 0.67385 
S1_644966 0.61051 0.61051 0.61051 0.61051 
S1_1625764 NA 0.71429 NA 0.71429 
S1_1761929 0.69137 0.69137 0.69137 0.69137 
S1_1778021 0.72372 0.72372 0.72372 0.72372 
S1_1778059 0.72507 0.72507 0.72507 0.72507 
S1_1778136 0.68733 0.68733 0.68733 0.68733 
S1_1778289 0.69946 0.69946 0.69946 0.69946 
S1_1780669 0.73046 0.73046 0.73046 0.73046 
S1_1786636 0.71563 0.71563 0.71563 0.71563 
S1_1786639 0.71833 0.71833 0.71833 0.71833 
S1_1786640 0.71294 0.71294 0.71294 0.71294 
S1_1786678 0.71429 0.71429 0.71429 0.71429 
S1_1963487 0.72776 0.72776 0.72776 0.72776 
S1_2036329 0.74259 0.74259 0.74259 0.74259 
S1_2036386 0.74394 0.74394 0.74394 0.74394 
S1_2037735 0.7628 0.7628 0.7628 0.7628 
S1_2037760 0.7628 0.7628 0.7628 0.7628 
S1_2037773 0.7628 0.7628 0.7628 0.7628 
S1_2042132 0.58491 NA NA NA 

(gwas_100 & gwas_101) = Sum (gwas100) - sum (gwas_101), where 
sum gwas_100 = 0.67385 + 0.61051 + 0.69137.....+0.58491) 
sum gwas_101 = 0.67385 + 0.61051+ ....... 0.7228), therefore 
(gwas_100 & gwas_101) = 13.4905 - 13.61994 = -0.12938 

다음 I는 상호간 및 371 개 유전자형 의 모든 가능한 조합 행렬을 얻을 필요가 수학 식 등 일례

 gwas_100 gwas101 gwas_102 gwas_103 
gwas_100   -0.12 0.14  0.05 
gwas_101     0.06  0.1 
gwwas_102       0.07 
gwas_103 
로서

미리 감사드립니다.

답변

0

먼저을 사용할 수 있습니다. 51,378,가 NA의 무시 열을 요약하면 다음 outer을 사용하여 쌍을 빼지 :

sums <- colSums(data[-1], na.rm=TRUE) 
outer(sums,sums,`-`) 
     gwas_100 gwas_101 gwas_102 gwas_103 
gwas_100 0.00000 -0.12938 0.58491 -0.12938 
gwas_101 0.12938 0.00000 0.71429 0.00000 
gwas_102 -0.58491 -0.71429 0.00000 -0.71429 
gwas_103 0.12938 0.00000 0.71429 0.00000 
+0

감사합니다 당신이 대답 있도록. 나는 또한 복잡한 방정식을 사용하고 싶습니다. 예 : –

+0

감사합니다. 나는 또한 복잡한 방정식을 사용하고 싶습니다. 예를 들어 gwas_100 & gwas_101 = Sum (p1-p2)^2/105854이다. 여기서 P1 및 p2는 하나의 마커에 대한 gwas_100 및 gwas_101의 숫자입니다. 즉, 나는 열 2에서 열 1의 값을 뺀 다음 그 차이를^2 합계로 계산해야합니다. 미리 감사드립니다. 당신의 시간과 노력은 높이 평가됩니다. –

+0

@AhmedSallam 이것은 매우 다른 질문입니다. 그래서 여러분은 전체 계산을 바깥쪽에 두어야합니다. 그러면 성능이 떨어집니다. 다음과 같이 시도 할 수 있습니다 :'outer (names (data [, - 1]), names (data [, -1]), function (x, y) {colSums ((data [, x] -data [, y]) * * 2, na.rm = TRUE)})' – HubertL