如何使用“cor.test”来关联特定列?
How to use `cor.test` for correlation of specific columns?
我有以下数据示例:
A<-rnorm(100)
B<-rnorm(100)
C<-rnorm(100)
v1<-as.numeric(c(1:100))
v2<-as.numeric(c(2:101))
v3<-as.numeric(c(3:102))
v2[50]<-NA
v3[60]<-NA
v3[61]<-NA
df<-data.frame(A,B,C,v1,v2,v3)
如您所见,df 在第 5 列中有 1 个 NA,在第 6 列中有 2 个 NA。
现在我想一方面制作 col1 和 3 的相关矩阵,另一方面制作 col2,4,5,6 的相关矩阵。在 R 中使用 cor 函数:
cor(df[ , c(1,3)], df[ , c(2,4,5,6)], use="complete.obs")
# B v1 v2 v3
# A -0.007565203 -0.2985090 -0.2985090 -0.2985090
# C 0.032485874 0.1043763 0.1043763 0.1043763
这行得通。然而,我想同时拥有 estimate 和 p.value 因此我切换到 cor.test.
cor.test(df[ ,c(1,3)], df[ , c(2,4,5,6)], na.action = "na.exclude")$estimate
这不起作用,因为 'x' 和 'y' 必须具有相同的长度。
这个错误实际上发生在数据中有或没有 NA 的情况下。似乎 cor.test 不理解(与 cor 不同)关联特定列的请求。这个问题有什么解决办法吗?
您可以使用outer
在所有列对之间执行测试。这里 X
和 Y
是从 df
扩展而来的数据框,每个由 8 列组成。
outer(df[, c(1,3)], df[, c(2,4,5,6)], function(X, Y){
mapply(function(...) cor.test(..., na.action = "na.exclude")$estimate,
X, Y)
})
您甚至可以得到与 cor
:
相同形式的输出
B v1 v2 v3
A 0.07844426 0.01829566 0.01931412 0.01528329
C 0.11487140 -0.14827859 -0.14900301 -0.15534569
我有以下数据示例:
A<-rnorm(100)
B<-rnorm(100)
C<-rnorm(100)
v1<-as.numeric(c(1:100))
v2<-as.numeric(c(2:101))
v3<-as.numeric(c(3:102))
v2[50]<-NA
v3[60]<-NA
v3[61]<-NA
df<-data.frame(A,B,C,v1,v2,v3)
如您所见,df 在第 5 列中有 1 个 NA,在第 6 列中有 2 个 NA。 现在我想一方面制作 col1 和 3 的相关矩阵,另一方面制作 col2,4,5,6 的相关矩阵。在 R 中使用 cor 函数:
cor(df[ , c(1,3)], df[ , c(2,4,5,6)], use="complete.obs")
# B v1 v2 v3
# A -0.007565203 -0.2985090 -0.2985090 -0.2985090
# C 0.032485874 0.1043763 0.1043763 0.1043763
这行得通。然而,我想同时拥有 estimate 和 p.value 因此我切换到 cor.test.
cor.test(df[ ,c(1,3)], df[ , c(2,4,5,6)], na.action = "na.exclude")$estimate
这不起作用,因为 'x' 和 'y' 必须具有相同的长度。 这个错误实际上发生在数据中有或没有 NA 的情况下。似乎 cor.test 不理解(与 cor 不同)关联特定列的请求。这个问题有什么解决办法吗?
您可以使用outer
在所有列对之间执行测试。这里 X
和 Y
是从 df
扩展而来的数据框,每个由 8 列组成。
outer(df[, c(1,3)], df[, c(2,4,5,6)], function(X, Y){
mapply(function(...) cor.test(..., na.action = "na.exclude")$estimate,
X, Y)
})
您甚至可以得到与 cor
:
B v1 v2 v3
A 0.07844426 0.01829566 0.01931412 0.01528329
C 0.11487140 -0.14827859 -0.14900301 -0.15534569