2015-06-01 13 views
3

我有以下數據例如:如何使用`cor.test`來關聯特定列?

A<-rnorm(100) 
B<-rnorm(100) 
C<-rnorm(100) 

v1<-as.numeric(c(1:100)) 
v2<-as.numeric(c(2:101)) 
v3<-as.numeric(c(3:102)) 
v2[50]<-NA 
v3[60]<-NA 
v3[61]<-NA 

df<-data.frame(A,B,C,v1,v2,v3) 

正如你可以看到DF具有1 NA第5列中,和2 NA在塔6 現在我想使col1和3的相關矩陣上一方面,col2,4,5,6另一方面。使用R中的相應功能:

cor(df[ , c(1,3)], df[ , c(2,4,5,6)], use="complete.obs") 

#    B   v1   v2   v3 
# A -0.007565203 -0.2985090 -0.2985090 -0.2985090 
# C 0.032485874 0.1043763 0.1043763 0.1043763 

這是有效的。然而,我想要估計和p.value,因此我切換到cor.test。

cor.test(df[ ,c(1,3)], df[ , c(2,4,5,6)], na.action = "na.exclude")$estimate 

這並不爲'X' 和 'Y' 的工作必須具有相同的長度。 這個錯誤實際上是在數據中有或沒有NA的情況下發生的。似乎cor.test不理解(不像cor)關聯特定列的請求。有沒有解決這個問題的方法?

+1

'cor.test'說'x'和'y'應該是載體。另外一個選擇是'psych'包裝中的'corr.test' – user20650

+1

謝謝,這看起來非常棒! Benjamini Hochberg甚至有可能在裏面,很好! –

回答

3

您可以使用outer在所有列對之間執行測試。這裏的XY是從df擴展的數據幀,每個由8列組成。

outer(df[, c(1,3)], df[, c(2,4,5,6)], function(X, Y){ 
    mapply(function(...) cor.test(..., na.action = "na.exclude")$estimate, 
      X, Y) 
}) 

您還可以得到相同的形式輸出爲cor

  B   v1   v2   v3 
A 0.07844426 0.01829566 0.01931412 0.01528329 
C 0.11487140 -0.14827859 -0.14900301 -0.15534569 
+0

偉大的解決方案,它的工作原理,非常感謝! –

+0

不客氣! 'outer'是一個很好的函數,但是要注意,如果你在大型數據集上使用'''''X'和''''可能會變得非常大。 – Backlin

相關問題