2017-06-07 128 views
1

試圖在一個矩陣來計算特定基因(這裏其基因1)與所有其它(35999個候選)的相關性一到以矩陣許多相關計算中的R

  samp1 samp2 samp3 samp4 
Gene 1 3.7891 2.4487 1.1939 0.6013 
Gene 2 1.4484 3.2316 2.841 1.9545 
Gene 3 0.4505 2.6062 2.0729 0.6403 
. 
. 
Gene 36000 1.8828 5.2633 2.7552 1.7335 

我用下面的代碼

library(Hmisc) 
A <- read.table("C:/Users/Desktop/exp.txt", header=T, sep="\t") 
cor <- rcorr(as.matrix(A), type="pearson") 


write.csv(cor$r,'C:/Users/Desktop/pCC VALUES.csv') 
write.csv(cor$P,'C:/Users/Desktop/p VALUES.csv') 

但上面的代碼是矩陣計算36000 * 36000。但是,我想獲得一對多相關性,其中感興趣的基因始終是第一個基因。這裏它的基因1.這將節省處理時間。一種方法顯然是從輸出中提取36000對我的興趣。我想知道是否有其他方法可以找到我的基因與其他所有其他方法的相關性,而不需要多對多的計算。

編輯:

我正在尋找類似的格式輸出,

Gene 1 Gene 2 pcc p-value 
Gene 1 Gene 3 pcc p-value 
. 
. 
Gene 1 Gene 36000 pcc p-value 
end 
+0

您能否在此背景下澄清一對多含義?您想要將Gene1的4個樣本與4個樣本的35999個其他組相關聯,一次一個?如果是這樣,則不存在1對1的樣本,這是35999個一對一樣本。但也許我是誤解。 –

+0

@DominicComtois我同意使用'一對多'的術語令人困惑。我編輯了帖子並添加了我正在尋找的輸出格式。與上面的代碼預期幾乎相同的結果,但它應該僅限於基因1的PCC對。 – Donjin

回答

0

如果我得到你的權利(與其他每一行相關第一行,一次取一個),東西沿着這些線路可能讓你開始:

dat <- as.matrix(read.table(text = "samp1;samp2;samp3;samp4 
Gene 1;3.7891;2.4487;1.1939;0.6013 
Gene 2;1.4484;3.2316;2.841;1.9545 
Gene 3;0.4505;2.6062;2.0729;0.6403 
Gene 4;0.4705;2.4062;1.0729;0.6003 
Gene 5;1.8828;5.2633;2.7552;1.7335", sep=";")) 

corr_list <- list() 

for (i in 2:nrow(dat)) { 
    r <- cor.test(dat[1,], dat[i,]) 
    corr_list[[paste("Genes 1 &", i)]] <- c(r$estimate, p.val=r$p.value) 
} 


# Results 
corr_list 

$`Genes 1 & 2` 
     cor  p.val 
-0.3070573 0.6929427 

$`Genes 1 & 3` 
     cor  p.val 
-0.1417635 0.8582365 

$`Genes 1 & 4` 
     cor  p.val 
0.04777015 0.95222985 

$`Genes 1 & 5` 
     cor  p.val 
0.1425788 0.8574212 

你也可以把導致data.frame如果更方便:

corr_list <- data.frame(Gene1=numeric(), Gene2=numeric(), cor=numeric(), p.value=numeric()) 

for (i in 2:nrow(dat)) { 
    r <- cor.test(dat[1,], dat[i,]) 
    corr_list[i-1,] <- c(1, i, r$estimate, r$p.value) 
} 

corr_list 

    Gene1 Gene2   cor p.value 
1  1  2 -0.30705735 0.6929427 
2  1  3 -0.14176355 0.8582365 
3  1  4 0.04777015 0.9522299 
4  1  5 0.14257884 0.8574212 
+0

感謝您的代碼,並解決了我的問題。 – Donjin

+0

不客氣,高興地幫忙! –