2017-05-04 1 views
0

192 개의 열이있는 데이터 프레임이 있습니다. 페어링을 기반으로 일치하는 열을 빼서 96 열 데이터 프레임을 만들고 싶습니다. 페어링 정보는 데이터 프레임 PairingMatch에 있습니다. 열 Pos은 부분 문자열로 빼기 원하는 데이터 프레임의 열 이름과 일치합니다.쌍으로 된 열 빼기

Pairing의 연결 정보를 사용하여 뺄 항목을 식별하는 방법은 무엇입니까?

> Pairing 
Match    Pos 
Control_70   001_A01 
Control_56   001_A02 
    Case_70   001_A03 
    Case_56   001_A04 
Control_21   001_A05 
    Case_21   001_A06 


> head(matures.cpm.spike.batch[,1:6]) 
       001_A01_S1 001_A02_S2 001_A03_S3 001_A04_S4 001_A05_S5 001_A06_S6 
hsa-let-7a-5p 16.566813 11.415796 12.400252 22.701457 8.864882 20.442599 
hsa-let-7b-5p 15.574190 11.107133 12.196465 17.954547 8.527478 25.788286 
hsa-let-7c-5p 5.976763 4.372978 5.984685 9.821348 6.341252 7.480211 
hsa-let-7d-3p 16.508818 10.697730 11.001534 18.375286 7.583910 24.974774 
hsa-let-7d-5p 13.273824 5.134547 9.456675 11.567230 7.096485 13.294108 
hsa-let-7f-5p 13.900711 9.804384 11.481614 20.002110 7.878241 17.295909 
+1

그것은 방식이 불분명 한 열을 쌍으로 묶으십시오. 어쩌면 불필요한 정보 (페어링에서 불필요한 열을 의미)를 모두 제거하고 실제적인 예를 제시해야합니다. –

+0

업데이트 됨. 어쩌면 이것이 실제적인 예가 될 수 있습니다. – user2300940

+0

'Pairing $ Pos'이 (가) 데이터에 표시된 헤더와 일치하지 않습니다. 또한 데이터를 붙여 넣는 대신 양쪽 모두를 제공 할 수 있다면 많은 도움이됩니다. [위대한 R 재현 가능한 예제를 만드는 방법] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) –

답변

1

모든 케이스에 대해 정확히 하나의 컨트롤이 있다고 가정합니다. 반대의 경우도 마찬가지입니다. Pairing data.frame을 변환하여 케이스와 컨트롤을 정렬하는 것이 가장 쉬운 방법 인 것 같습니다. 일단 완료되면 원하는 데이터 프레임을 구축 할 수 있습니다. 이런 경우에

## First, recreate your data 
Pairing = read.table(text="Match    Pos 
Control_70   001_A01 
Control_56   001_A02 
    Case_70   001_A03 
    Case_56   001_A04 
Control_21   001_A05 
    Case_21   001_A06", 
header=TRUE) 

matures.cpm.spike.batch = read.table(text=" 001_A01_S1 001_A02_S2 001_A03_S3 001_A04_S4 001_A05_S5 001_A06_S6 
hsa-let-7a-5p 16.566813 11.415796 12.400252 22.701457 8.864882 20.442599 
hsa-let-7b-5p 15.574190 11.107133 12.196465 17.954547 8.527478 25.788286 
hsa-let-7c-5p 5.976763 4.372978 5.984685 9.821348 6.341252 7.480211 
hsa-let-7d-3p 16.508818 10.697730 11.001534 18.375286 7.583910 24.974774 
hsa-let-7d-5p 13.273824 5.134547 9.456675 11.567230 7.096485 13.294108 
hsa-let-7f-5p 13.900711 9.804384 11.481614 20.002110 7.878241 17.295909", 
header=TRUE) 

## Build Matches to replace your Pairing 
Control = Pairing[grep("Control", Pairing$Match),] 
Control = Control[order(Control$Match),] 
Case = Pairing[grep("Case", Pairing$Match),] 
Case = Case[order(Case$Match),] 
Matches = cbind(Control, Case) 

# Uses Matches to build desired data.frame 
Diffs = data.frame(matures.cpm.spike.batch[, Matches[1,4]] - 
     matures.cpm.spike.batch[, Matches[1,2]]) 
colnames(Diffs)[1] = sub("Control", "Diff", Matches[1,1]) 
for(i in 2:nrow(Matches)) { 
    Diffs[,i] = matures.cpm.spike.batch[, Matches[i,4]] - 
     matures.cpm.spike.batch[, Matches[i,2]] 
    colnames(Diffs)[i] = sub("Control", "Diff", Matches[i,1]) 
} 

## Result 
    Diff_21 Diff_56 Diff_70 
1 11.577717 11.285661 -4.166561 
2 17.260808 6.847414 -3.377725 
3 1.138959 5.448370 0.007922 
4 17.390864 7.677556 -5.507284 
5 6.197623 6.432683 -3.817149 
6 9.417668 10.197726 -2.419097 
+0

어떻게 원래 이름의 데이터 프레임을 유지합니까? – user2300940

+0

원본 데이터 프레임에는 192 개의 열이 있습니다. 새 데이터 프레임에는 96이 있습니다. 원하는 열 이름은 무엇입니까? 통제 또는 사례? – G5W

0

, 다른 접근 방식 :

우리는 환자군과 대조군에 대해 별도의 열이, 수정 일치하는 데이터 프레임을 필요로하기 위하여려고하고있다 :

library(tidyr) 
library(reshape2) 

P <- Pairing %>% 
    separate(Match, into = c("cc", "ind"), sep = "_") %>% 
    dcast(ind ~ cc, value.var = "Pos") 

P:

ind Case Control 
1 21 001_A06 001_A05 
2 56 001_A04 001_A02 
3 70 001_A03 001_A01 

colnamesmatures.cpm.spike.batch에 입력하고 싶습니다. P에서 일치하는 이름 :

colnames(df):

[1] "001_A01" "001_A02" "001_A03" "001_A04" "001_A05" "001_A06" 

이제 우리는 간단하게 다음과 같이 완료 할 수 있습니다

case <- df[, P$Case] 
control <- df[, P$Control] 
res <- case - control 

res:

   001_A06 001_A04 001_A03 
hsa-let-7a-5p 11.577717 11.285661 -4.166561 
hsa-let-7b-5p 17.260808 6.847414 -3.377725 
hsa-let-7c-5p 1.138959 5.448370 0.007922 
hsa-let-7d-3p 17.390864 7.677556 -5.507284 
hsa-let-7d-5p 6.197623 6.432683 -3.817149 
hsa-let-7f-5p 9.417668 10.197726 -2.419097