我有一个数据框,其列是实验的不同样本。我想找到这些样本之间的相关性。因此,样本v2和v3之间,样本v2和v4之间的相关性,.... 这是数据框:
> head(t1)
V2 V3 V4 V5 V6
1 0.12725011 0.051021886 0.106049328 0.09378767 0.17799444
2 0.86096784 1.263327211 3.073650624 0.75607466 0.92244361
3 0.45791031 0.520207274 1.526476608 0.67499102 0.49817761
4 0.00000000 0.001139721 0.003158557 0.00000000 0.00000000
5 0.13383965 0.098943019 0.099922146 0.13871867 0.09750611
6 0.01016334 0.010187671 0.025410170 0.00000000 0.02369374
> nrow(t1)
[1] 23367
如果我为这个数据帧运行cor函数以获得样本(列)之间的相关性,我得到所有样本的NA:
> cor(t1, method= "spearman")
V2 V3 V4 V5 V6
V2 1 NA NA NA NA
V3 NA 1 NA NA NA
V4 NA NA 1 NA NA
V5 NA NA NA 1 NA
V6 NA NA NA NA 1
但如果我这样做:
> cor.test(t1[,1],t1[,2], method="spearman")$estimate
rho
0.92394
它是不同的。为什么会这样?获得这些样本之间相关性的正确方法是什么? 提前谢谢。
答案 0 :(得分:5)
您的数据包含NA
个值。
来自?cor
:
如果使用“一切”,NA将在概念上传播,即a 每当其中一个贡献时,结果值将为NA 观察结果是NA。
来自?cor.test
na.action一个函数,指示数据时应该发生什么 包含NA。默认为getOption(“na.action”)。
在我的系统上:
getOption("na.action")
[1] "na.omit"
使用which(!is.finite(t1))
搜索有问题的值,使用which(is.na(t1))
搜索NA
值。如果您的数据中包含cor
值,则NaN
会返回Inf
。