2017-12-31 79 views
0

모든 데이터 열에이 데이터 프레임의 특정 열을 사용하여 상관 관계를 계산하고 계산 된 상관 관계가 들어있는 새 열을 추가 할 수있는 큰 데이터 프레임이 있습니다. , 분명히dplyr :: mutate를 사용하여 R에서 페어 와이즈 상관 관계를 계산하십시오.

example_data %>% 
mutate(pearsoncor = cor(x = X001_F5_000_A:X030_F5_480_C, y = X031_H5_000_A:X060_H5_480_C)) 

나는 pearsoncor 열에 만 NA's를 얻을로이 방법을 작동하지 않는 사람이있다 않습니다 : 여기에

는 내가하고 싶은 것이 요약 (dplyr를 사용하여이 일)입니다 암시? 이 작업을 수행하는 쉬운 방법이 있습니까?

보다도,

Example data frame

+0

올바르게 사용하지 않았기 때문에 작동하지 않습니다. 'diag (cor (t (example_data [columnnames])), t (example_data [columnnames])))'또는'purrr'' map2_dbl (as.data.frame (t (example_data [columnnames])), as.data .frame (t (example_data [columnnames])), cor)' – akrun

+0

질문을 검토하고 https://stats.stackexchange.com에서 답변을 얻으시기 바랍니다. 나는 당신을 위해 하나를 코딩하는 것보다 더 통계적인 문제라고 생각한다. –

답변

0

나는 몇 일 다시 같은 문제가 있고, 나는 루프 R에 최적이 아닌 알고하지만 내가 생각할 수있는 유일한 일이 :

df$r = rep(0,nrow(df)) 
df$cor_p = rep(0,nrow(df)) 

for (i in 1:nrow(df)){ 
    ct = cor.test(as.numeric(df[i,cols_A]),as.numeric(df[i,cols_B])) 
df$r[i] = ct$estimate 
df$cor_p[i] = ct$p.value 
} 
+0

Eudald에게 감사드립니다. 효율적인 솔루션을 찾는 동안 유사한 루프를 사용했습니다. 내 데이터 세트를 사용하면 루프를 완료하는 데 약 5 분이 걸립니다. -/ – user2259380

+0

커피를 마시기에 완벽한 시간 ;-) (더 효율적인 것으로 생각합니다!) – Eudald

0

reshape2 패키지를 사용하여 melt() 데이터 프레임을 긴 형식으로 변환하여 각 값이 자체 행을 갖도록하는 솔루션입니다. 원래의와 이드 데이터는 6 개의 유전자 각각에 대해 행당 60 개의 값을 가지며 용융 된 긴 형태의 데이터 프레임에는 각 값에 대해 하나씩 360 개의 행이 있습니다. 그런 다음 summarize()dplyr에서 쉽게 사용하여 루프없이 상관 관계를 계산할 수 있습니다.

library(reshape2) 
library(dplyr) 

names1 <- names(example_data)[4:33] 
names2 <- names(example_data)[34:63] 

example_data_longform <- melt(example_data, id.vars = c('Gene','clusterFR','clusterHR')) 

example_data_longform %>% 
    group_by(Gene, clusterFR, clusterHR) %>% 
    summarize(pearsoncor = cor(x = value[variable %in% names1], 
          y = value[variable %in% names2])) 

또한 do()를 사용 Eudald의 대답 같이 상세한 결과를 생성 할 수 :

detailed_r <- example_data_longform %>% 
    group_by(Gene, clusterFR, clusterHR) %>% 
    do(cor = cor.test(x = .$value[.$variable %in% names1], 
        y = .$value[.$variable %in% names2])) 

이것은 cor 열의 각 유전자 cor.test() 결과에리스트되고 함께 tibble 출력한다. lapply()을 사용하여 목록에서 출력을 추출 할 수 있습니다.

lapply(detailed_r$cor, function(x) c(x$estimate, x$p.value))