任何與以下問題的幫助將不勝感激;行之間的皮爾遜係數R
我正在嘗試使用R來查找1個特定數據行與數據集中每個其他行(單獨)之間的皮爾遜係數,以確定哪些行與感興趣的行有顯着相關性。數據幀由20列和50,000行組成,數據本身由數字值組成。 是否可以用cor.test或其他適當的函數來實現這一點?
任何與以下問題的幫助將不勝感激;行之間的皮爾遜係數R
我正在嘗試使用R來查找1個特定數據行與數據集中每個其他行(單獨)之間的皮爾遜係數,以確定哪些行與感興趣的行有顯着相關性。數據幀由20列和50,000行組成,數據本身由數字值組成。 是否可以用cor.test或其他適當的函數來實現這一點?
首先,我建議將輸入對象重新格式化爲矩陣而不是data.frame。
您可以使用apply()
遍歷矩陣的所有行,並在當前行和感興趣的行之間運行cor()
。這將產生相關性的向量。
在下面的代碼中,我生成一個隨機矩陣m
20列和50,000行,並存儲在ri
感興趣的行。然後,我們可以調用apply()
帶有行邊距(即MARGIN=1L
)在每行上針對感興趣的行m[ri,]
調用cor()
。
您可以選擇包含或排除迭代感興趣的行。在我的代碼示例中,我將它包括在內,這導致元素在結果向量res
中的索引ri
處保證具有值1。這個選擇的一個好的副作用是結果向量長度爲50,000,與輸入矩陣中的行數相同,因此索引將對齊。如果您選擇排除它,可以通過將m[-ri,]
傳遞給apply()
調用而不是m
來完成,結果向量將具有長度49,999,並且其元素將不再與輸入矩陣的行對齊。
NR <- 50e3L; NC <- 20L; m <- matrix(runif(NR*NC),NR);
ri <- 2L; res <- apply(m,1L,cor,m[ri,]);
str(res);
## num [1:50000] -0.074 1 0.201 -0.0467 0.2097 ...
summary(res);
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -0.806700 -0.158500 0.001143 0.001114 0.160800 1.000000
您可以cor.test()
替代cor()
獲得由後者提供的附加信息,但在稍長的運行時間爲代價的,更復雜的結果對象(一個列表,而不是原子向量)。
非常感謝你這個工程。你可能會建議我如何將結果輸出到Excel表格中?我曾嘗試使用像pvalues < - res $ p.value,res $「p.value」等東西,並不斷收到NULL消息。 – user5688971
如果你問如何從'cor.test()'結果列表中提取P值,你可以使用'pvalues < - sapply(res,'[[','p.value')''。如果您問如何將數據從R導出到Excel,那麼我會推薦一個[Google搜索](https://www.google.ca/search?q=export+r+to+excel)。如果沒有Google結果適用於您的用例,我會建議在堆棧溢出問一個新問題。 – bgoldst
謝謝你,完美的作品 – user5688971