2017-02-20 41 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") 

如果缺失值的比例很小,那么结果你得到的相关性系数(皮尔逊,斯皮尔曼等)仍然应该反映真相。