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))
올바르게 사용하지 않았기 때문에 작동하지 않습니다. '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
질문을 검토하고 https://stats.stackexchange.com에서 답변을 얻으시기 바랍니다. 나는 당신을 위해 하나를 코딩하는 것보다 더 통계적인 문제라고 생각한다. –