2017-02-20 73 views
0

我有兩列缺少數據。查找排除兩列缺失值的觀察子集

Var1 Var2 
1445 40 
656  NA 
NA  NA 
607  NA 
2098 15 

我想計算這些列之間的相關性,同時排除缺少數據的觀測值。我試圖

cor(na.omit(df$Var1),na.omit(df$Var2),method="pearson") 

但我得到的心病(na.omit(DF $ VAR1),na.omit

錯誤(DF $ VAR2): 不相容的維度

我認爲這是因爲,而不是採取這兩個變量的交集,我越來越

Var1(NA omit) Var2(NA omit) 
1445   40 
656    15 
607  
2098 

,所以沒有關聯可以運行,因爲它改變了列的長度。

如何忽略包含NA的所有觀察值,以便列的長度相同?

+0

'COR(na.omit(DF $ VAR1),na.omit(DF $ VAR2),方法= 「皮爾森」,使用=「成對.complete.obs「)' – kaksat

+2

但是,您可能想要閱讀以下內容:[配對 - 完全關聯被認爲是危險的](http://bwlewis.github.io/covar/missing.html)。 –

+0

謝謝,不知道這個。 – kaksat

回答

1

缺失值可以使用use參數處理。參閱?cor

使用的可選字符串給出用於缺失值的存在計算 協方差的方法。這必須是字符串「everything」,「all.obs」, 「complete.obs」,「na.or.complete」或「pairwise.complete.obs」之一的字符串( 的縮寫)。

cor(df1, use = "complete.obs") 
#  Var1 Var2 
# Var1 1 -1 
# Var2 -1 1  

數據:

df1 <- structure(list(Var1 = c(1445L, 656L, NA, 607L, 2098L), 
         ar2 = c(40L, NA, NA, NA, 15L)), 
       .Names = c("Var1", "Var2"), 
       row.names = c(NA, -5L), class = "data.frame") 
+0

了不起。我看到'use =「complete.obs」',但無法弄清楚它的用途。那完全解決了它。 –

1

如果你是用平均替換每個變量的NA值OK,那麼這是一種方法:

var1[is.na(var1)] <- mean(var1, na.rm=TRUE) 
var2[is.na(var2)] <- mean(var2, na.rm=TRUE) 
cor(var1, var2, method="pearson") 

如果缺失值的比例很小,那麼結果你得到的相關性係數(皮爾遜,斯皮爾曼等)仍然應該反映真相。