R中的cor()行为在各个向量和data.frame之间有所不同

时间:2011-12-06 18:51:00

标签: r dataframe correlation pearson

我试图获得数据框中所有行相对于彼此的Pearson相关系数。有些值是空的(NA),这似乎是一个问题,我在两个缺少值的向量上运行cor()时没有遇到这个问题。这是2个向量的正确结果:

x <- c(NA, 4.5, NA, 4, NA, 1)
y <- c(2.5, 3.5, 3, 3.5, 3, 2.5)
cor(x,y, use = "complete.obs")
[1] 0.9912407

以下是数据框中的结果:

cor(t(critics1), use = "complete.obs")
   y  a  b  c  d  e  x
y  1 NA NA NA NA NA NA
a NA  1  1  1 -1  1 -1
b NA  1  1  1 -1  1 -1
c NA  1  1  1 -1  1 -1
d NA -1 -1 -1  1 -1  1
e NA  1  1  1 -1  1 -1
x NA -1 -1 -1  1 -1  1
Warning message:
In cor(t(critics1), use = "complete.obs") : the standard deviation is zero

为什么use参数不具有相同的效果? 以下是批评者1数据框的样子;

film1 film2 film3 film4 film5 film6
y   2.5   3.5   3.0   3.5   3.0   2.5
a   3.0   3.5   1.5   5.0   3.0   3.5
b   2.5   3.0    NA   3.5   4.0    NA
c    NA   3.5   3.0   4.0   4.5   2.5
d   3.0   4.0   2.0   3.0   3.0   2.0
e   3.0   4.0    NA   5.0   3.0   3.5
x    NA   4.5    NA   4.0    NA   1.0

1 个答案:

答案 0 :(得分:7)

正如@joran推测的那样,当你转置critics1时,只有两个完整的观察结果(即没有缺失值的行)。这就是为什么所有关联都是1-1或(对于那些涉及y的关联,在两个完整行中都为3.5){。1}}。

NA

如果您使用t(critics1) # y a b c d e x # film1 2.5 3.0 2.5 NA 3 3.0 NA # film2 3.5 3.5 3.0 3.5 4 4.0 4.5 # film3 3.0 1.5 NA 3.0 2 NA NA # film4 3.5 5.0 3.5 4.0 3 5.0 4.0 # film5 3.0 3.0 4.0 4.5 3 3.0 NA # film6 2.5 3.5 NA 2.5 2 3.5 1.0 代替use="pairwise.complete.obs",则可以按照您的意愿使用:

use="complete.obs"