2016-02-13 49 views
0

我可以得到cor()的相关矩阵,但我不知道如何获得观测值的潜在数量。有没有办法?关联表与观测数量N

#reproducible data 
mydata <- mtcars 
#add random missing 
set.seed(17) 
mydata[sample(x=nrow(mydata), size=5), "mpg"] <- NA 
mydata[sample(x=nrow(mydata), size=5), "hp"] <- NA 
mydata[sample(x=nrow(mydata), size=5), "wt"] <- NA 
View(mydata) 


#correlation matrix 
cor(subset(mydata, select=c(mpg, hp, wt)), use="pairwise.complete.obs") 

我想的矩阵,平行于相关矩阵,这三个值:

#N observations 
cor.test(mydata$mpg, mydata$hp, na.action="na.exclude")$parameter + 2 
cor.test(mydata$mpg, mydata$wt, na.action="na.omit")$parameter + 2 
cor.test(mydata$wt, mydata$hp, na.action="na.omit")$parameter + 2 
#or 
nrow(na.omit(subset(mydata, select=c(mpg, hp)))) 
nrow(na.omit(subset(mydata, select=c(mpg, wt)))) 
nrow(na.omit(subset(mydata, select=c(hp, wt)))) 

回答

2

更新:甚至更​​短的溶液(由@akrun)

crossprod(!is.na(mydata)) 

请问你想要什么

res <- sapply(mydata, function(i) {!is.na(i)}) 
crossprod(res) 

这导致

 mpg cyl disp hp drat wt qsec vs am gear carb 
mpg 27 27 27 23 27 22 27 27 27 27 27 
cyl 27 32 32 27 32 27 32 32 32 32 32 
disp 27 32 32 27 32 27 32 32 32 32 32 
hp 23 27 27 27 27 22 27 27 27 27 27 
drat 27 32 32 27 32 27 32 32 32 32 32 
wt 22 27 27 22 27 27 27 27 27 27 27 
qsec 27 32 32 27 32 27 32 32 32 32 32 
vs 27 32 32 27 32 27 32 32 32 32 32 
am 27 32 32 27 32 27 32 32 32 32 32 
gear 27 32 32 27 32 27 32 32 32 32 32 
carb 27 32 32 27 32 27 32 32 32 32 32 
0

ekstroem的解决方案是美丽的。我也刚刚发现psych包有一些很好的功能corr.test()功能

library("psych") 
corr.test(subset(mydata, select=c(mpg, hp, wt)), use="pairwise")