2012-01-25 2 views
0

PERL에서이 문제를 해결하려고 시도했지만 더 적은 데이터로만 작동하므로 R에서 솔루션이 필요합니다. PERL, 더 빠르고 쉽습니다. 나는 하나 개의 게놈 (제 1 및 제 2 열)의 두 위치이 같은 파일들을 bteween 거리 (세 번째 열)R에서 두 개의 빅 데이터 프레임 반복하기 조건을 사용하여 동시에 두 개의 다른 위치 비교하기

cg00000029 cg01016459 848 
cg00000029 cg02021817 38 
cg00000029 cg02851944 13 
cg00000029 cg02976952 238 
cg00000029 cg03943270 93 
cg00000029 cg07396495 604 
cg00000029 cg12190057 929 

있어 그리고 내 두 번째 파일은 게놈 위치와 함께,이 하나이며, 각 샘플 (1 ~ 6)에 대해 각 열의 한 표현식 값

TargetID sample1 sample2 sample3 sample4 sample5 sample6 
cg00000029 0.157 0.444 0.466 0.805 0.5489 0.448 
cg01016459 0.873 0.930 0.926 0.942 0.932 0.9128 
cg03943270 0.871 0.920 0.926 0.942 0.942 0.942 

사실 나는 100 개의 샘플을 가지고 있습니다. 내 생각은 각 샘플에 대해 최종 값을 얻으려면 표현식 값 대신 cg와 거리를 사용하십시오. 난 단지 두 개의 샘플을 가지고 예를 들어, PERL에서 샘플 2

0.444 0.930 848 
0.444 0.920 93 

샘플 1

0.157 0.873 848 
0.157 0.871 93 

위해 나는 아무 문제가 없다, 나는 두 estructures에 배열의 해시를 파일을로드 한 다음 중첩 된 foreach 루프를 사용하여 그것들을 비교하지만, 2 샘플에 대해서만 많은 시간이 걸리므로 100을 상상하십시오! I 문제 난 후 제 CPG 값을 사용하여 표현 된 데이터를 반복하는 루프 같은 것을 필요로하거나 기능을 적용하는 것이

expression[rownames(expression) %in% rownames(distances),] 

로 뭔가되는 2 개 데이터 프레임의 데이터를 로딩하고 사용 R에 시도 둘째, 표현식에 쌍으로 있으면 표현식 값과 거리를 넣는다.

`

+0

첫 번째 파일의 첫 번째 열은 실제로 다양합니까? 그렇다면 두 번째 열이있는 모든 순열을 통과합니까? "cg00000029 cg01016459"가 열 1과 2에 나타나지만 그 반대가 나타 납니까? – John

+0

아니요 사실 2 포인트 당 단 하나의 거리가 있습니다. 반복하지 않습니다 – user976991

+0

첫 번째 열은 다양하지만 사실 2 포인트에 대해 단 하나의 거리 만 있습니다. 반복하지 않기 때문에이 특정 거리 cpg가 계산됩니다. 반복하지 마십시오 – user976991

답변

2

어떤 아이디어가 사전에

덕분에 환영받을 첫 번째 데이터는 dat

structure(list(V1 = c("cg00000029", "cg00000029", "cg00000029", 
"cg00000029", "cg00000029", "cg00000029", "cg00000029"), V2 = c("cg01016459", 
"cg02021817", "cg02851944", "cg02976952", "cg03943270", "cg07396495", 
"cg12190057"), V3 = c(848L, 38L, 13L, 238L, 93L, 604L, 929L)), .Names = c("V1", 
"V2", "V3"), class = "data.frame", row.names = c(NA, -7L)) 

이고 두 번째 세트 target

structure(list(TargetID = c("cg00000029", "cg01016459", "cg03943270" 
), sample1 = c(0.157, 0.873, 0.871), sample2 = c(0.444, 0.93, 
0.92), sample3 = c(0.466, 0.926, 0.926), sample4 = c(0.805, 0.942, 
0.942), sample5 = c(0.5489, 0.932, 0.942), sample6 = c(0.448, 
0.9128, 0.942)), .Names = c("TargetID", "sample1", "sample2", 
"sample3", "sample4", "sample5", "sample6"), class = "data.frame", row.names = c(NA, 
-3L)) 
,369에있는 경우

match() 당신이 찾고있는 것을 얻을 것입니다. 나는 reshape 패키지와 plyr 패키지를 사용할 것이다. 특히 meltddply이 있지만 적용 버전도 있습니다.

> na.omit(as.data.frame(out[[1]])) 
    cgone cgtwo distance 
1 0.157 0.873  848 
5 0.157 0.871  93 
> 
+0

Justin 감사합니다! 그것은 어떻게 녹고 얼룩지게합니까? 그것은 내가 처음 보는 두 – user976991

+0

그것은 긴 대답입니다! 이 경우, 용융은 두 번째 데이터 세트를 취하여 플라이어가 더 쉽게 작동 할 수 있도록 "긴"형식으로 저장하는 데 사용됩니다. 플라이 (plyr)는 플라이에서 모두 끝나고 맨 앞의 두 글자는 무엇이 들어가고 무엇이 나올지 알려줍니다 (이 경우에는 데이터 프레임과리스트를 나타냄). 두 번째 인수는 분할 변수입니다. 이 경우에는 target.melt를 별도의 데이터 프레임으로 나눕니다. 고유 한 값은 열의 칼럼에서 찾을 수 있습니다 ... 분명히 진흙으로 확신합니다! – Justin

+0

다시 저스틴에게 감사드립니다! – user976991

0

당신은 merge와 두 data.frames에 가입 할 수 있습니다 변환 : 두 번째 데이터 세트가 불완전하지만 당신을 위해 무엇을 요구하는 것이 있기 때문에

target.melt <- melt(target,id.var='TargetID') 

my.func <- function(lookup,df) { 
    cg.one <- lookup$value[match(df$V1,lookup$TargetID)] 
    cg.two <- lookup$value[match(df$V2,lookup$TargetID)] 

    return(list(cgone=cg.one,cgtwo=cg.two,distance=df$V3)) 
} 

out <- dlply(target.melt,.(variable),my.func,df=dat) 

은 데이터의 NA의 무리가있다 결과를 melt으로 키가 큰 형식으로 변환 한 다음 결과의 각 부분에 d_pply으로 함수 (예 : 파일로 저장)를 적용하십시오.

# Sample data 
n <- length(LETTERS) 
d1 <- cbind(expand.grid(LETTERS, LETTERS), rnorm(n*n)) 
names(d1) <- c("id1", "id2", "distance") 
d1 <- d1[ as.character(d1$id1) < as.character(d1$id2), ] 
d2 <- as.data.frame(matrix(rnorm(n*6), nr=n)) 
d2 <- data.frame(id=LETTERS, d2) 
names(d2)[-1] <- paste("sample", 1:6, sep="") 

# If the distance data.frame only contains half the pairs, 
# i.e., if it only contains one of (a,b) and (b,a), 
# add the missing ones.  
d1a <- d1 
d1b <- d1[,c(2,1,3)] 
names(d1b) <- names(d1a) 
d1 <- rbind(d1a, d1b) 
d1 <- d1[ ! duplicated(d1[,1:2]), ] 

# Merge the two data.frames  
d <- merge(d1, d2, by.x="id1", by.y="id") 

# Convert to tall format 
library(reshape2) 
d <- melt(d, id.vars=c("id1", "id2", "distance")) 

# Apply a function to each chunk 
d_ply(d, "variable", function (u) { 
    cat("Would save ", nrow(u), " rows to ", as.character(u$variable[1]), "\n") 
}) 
관련 문제