2013-08-21 3 views
2

I는 다음과 같이 구성 데이터 파일을 가지고건의 매트릭스로 데이터 프레임을 변환

OTU1 PIA0 1120 
OTU2 PIA1 2 
OTU2 PIA3 6 
OTU2 PIA4 10 
OTU2 PIA5 1078 
OTU2 PIN1 24 
OTU2 PIN2 45 
OTU2 PIN3 261 
OTU2 PIN4 102 
OTU3 PIA0 16 
OTU3 PIA1 59 
OTU3 PIA2 27 
OTU3 PIA3 180 
OTU3 PIA4 200 
OTU3 PIA5 251 
OTU3 PIN0 36 
OTU3 PIN1 61 
OTU3 PIN2 156 
OTU3 PIN3 590 
OTU3 PIN4 277 
OTU4 PIA0 401 
OTU4 PIN0 2 

및 I는 계산을위한 기준으로 첫 번째 열을 가지고 두 번째 열의 데이터의 조합을 나타내는 매트릭스를 생성 할 (첫 번째 열 번호 -OTU1, OTU2, OTU3, OTU4- 두 번째 열의 각 데이텀이 동일한 OTU에 서로 함께 표시되는 횟수를 보여줍니다).

PIA0 PIA1 PIA2 PIA3 PIA4 PIA5 PIN0 PIN1 PIN2 PIN3 PIN4 
PIA0 1  1  1  1  1  1  2  1  1  1  1 
PIA1 1  0  1  2  2  2  1  2  2  2  2 
PIA2 1  1  0  1  1  1  1  1  1  1  1 
PIA3 1  2  1  0  2  2  1  2  2  2  2 
PIA4 1  2  1  2  0  2  1  2  2  2  2 
PIA5 1  2  1  2  2  0  1  2  2  2  2 
PIN0 2  1  1  1  1  1  0  1  1  1  1 
PIN1 1  2  1  2  2  2  1  0  2  2  2 
PIN2 1  2  1  2  2  2  1  2  0  2  2 
PIN3 1  2  1  2  2  2  1  2  2  0  2 
PIN4 1  2  1  2  2  2  1  2  2  2  0 

데이터 행과 동일한 이름을 가진 열 사이에 공유이 자료는 OTU에서 혼자 나타나는 횟수를 반영 그것은 다음과 같이해야합니다.

아이디어가 있으십니까?

나는 R 라이브러리 'reshape2'와 명령 'acast'here에 대해 읽었지 만, 그 안에있는 모든 데이터가있는 행렬의 모양 만 바꿀 수 있으므로 원하는만큼 조합 수를 만들 수는 없습니다. 또한 Biopython 스크립트에 대해서도 생각해 봤지만 프로그래밍에 대한 지식이 부족한만큼 그것을 작성하는 것은 너무 어렵고 어렵다고 생각합니다.

목표는이 예제와 같은 행렬을 작성하여이 데이터로 CIRCOS online 프로그램을 실행할 수 있습니다.

+0

귀하의 설명을 따르려고했지만 귀하의 데이터 사이에 링크가 보이지 않습니다. 간단한 예제를 게시 할 수 있습니까? – alexwhan

+0

하나의 'OTU'내에 두 번째 열의 각 데이터가 서로 얼마나 많이 나타나는지 나타내는 숫자를 쓰고 싶습니다. 예를 들어, 'PIA0'은 3 'OTUs'(첫 번째 열, OTU1, OTU3 및 OTU4)에 나타나고 PIN0은 2 (OTU3 및 OTU4)에만 나타납니다. 'PIA0'과 'PIN0'이 모두 OTU3와 OTU4에 나타나기 때문에 최종 테이블에서 교차점이 2 인 숫자가되어야합니다. –

답변

4

dcast을 사용하여 각 OTU 내부에 각 PI가 있음을 나타내는 이진 행렬을 생성 한 다음 자체적으로 곱하여 그 개수를 계산할 수 있습니다.

d <- read.fwf(textConnection(" 
OTU1 PIA0 1120 
OTU2 PIA1 2 
OTU2 PIA3 6 
OTU2 PIA4 10 
OTU2 PIA5 1078 
OTU2 PIN1 24 
OTU2 PIN2 45 
OTU2 PIN3 261 
OTU2 PIN4 102 
OTU3 PIA0 16 
OTU3 PIA1 59 
OTU3 PIA2 27 
OTU3 PIA3 180 
OTU3 PIA4 200 
OTU3 PIA5 251 
OTU3 PIN0 36 
OTU3 PIN1 61 
OTU3 PIN2 156 
OTU3 PIN3 590 
OTU3 PIN4 277 
OTU4 PIA0 401 
OTU4 PIN0 2"), widths=c(8,8,10), header=FALSE, skip=1) 

library(reshape2) 
A <- as.matrix(dcast(V1 ~ V2, data=d, length)[,-1]>0) 
#   PIA0  PIA1  PIA2  PIA3  PIA4  PIA5  PIN0  PIN1  PIN2  PIN3  PIN4  
# [1,]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
# [2,] FALSE  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE 
# [3,]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE 
# [4,]  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE 
t(A) %*% A 
#    PIA0  PIA1  PIA2  PIA3  PIA4  PIA5  PIN0  PIN1  PIN2  PIN3  PIN4  
# PIA0   3  1  1  1  1  1  2  1  1  1  1 
# PIA1   1  2  1  2  2  2  1  2  2  2  2 
# PIA2   1  1  1  1  1  1  1  1  1  1  1 
# PIA3   1  2  1  2  2  2  1  2  2  2  2 
# PIA4   1  2  1  2  2  2  1  2  2  2  2 
# PIA5   1  2  1  2  2  2  1  2  2  2  2 
# PIN0   2  1  1  1  1  1  2  1  1  1  1 
# PIN1   1  2  1  2  2  2  1  2  2  2  2 
# PIN2   1  2  1  2  2  2  1  2  2  2  2 
# PIN3   1  2  1  2  2  2  1  2  2  2  2 
# PIN4   1  2  1  2  2  2  1  2  2  2  2 
+0

고마워요. 우리가 찾고 있었던 것 같아요. 그러나 이전에 말한 것처럼 'R'은 매우 새로운 것이므로 많은 질문이 있습니다. 'widths = c (8,8,10)'은 무엇을 말합니까? 그리고 '[, -1]> 0'? 다시 한번 감사드립니다. –

+0

'width = c (8,8,10)'은 data.frame을 생성 할 때 사용했던'read.fwf'의 인수 일뿐입니다. 이미 data.frame을 가지고 있기 때문에 필요하지 않습니다. '[, -1]'은 첫 번째 열 (MTU를 포함)을 제거합니다. '> 0'은 카운트 ('length'의 결과)를 불린으로 변환합니다. 'dcast (V1 ~ V2, data = d)'와'dcast (V1 ~ V2, data = d) [, - 1])'또는'dcast (V1 ~ V2, data = d, length)'를 비교할 수 있습니다. –

+0

정말 고마워. 정말 잘 돌아갔다. (PIA0, PIA1, PIA2 ...) 결과의 각 열에 인수가 'TRUE'인 반면 다른 모든 열은 'FALSE'값 (number 각 열이 원본 데이터 프레임의 OTU의 고유 한 구성 요소로 나타나는 시간)? 다시 한 번 감사드립니다 –

관련 문제