在具有大量 NA 的情况下关联两个数据帧

Correlate two dataframes while having lots of NAs

假设我有两个数据帧,其中包含许多 NA:

DF1=data.frame(a=c(20,70,50,NA),b=c(40,90,30,20),c=c(60,110,NA,40))
DF2=data.frame(e=c(200,700,NA,400),f=c(400,900,500,200),g=c(600,1100,NA,700))

我仍然想关联这两个行,同时如果相关对中的一个值已经是 NA,则给出 NA。尝试了一个 for 循环:

for (M in 1:nrow(DF1)) {
  Test=cor(DF1[M,],DF2[M,],use="na.or.complete") 
  print(Test)
}

...这给了我这个:

  e  f  g
a NA NA NA
b NA NA NA
c NA NA NA
   e  f  g
a NA NA NA
b NA NA NA
c NA NA NA
   e  f  g
a NA NA NA
b NA NA NA
c NA NA NA
   e  f  g
a NA NA NA
b NA NA NA
c NA NA NA

我做错了什么?

在列上执行这样的操作通常更直接,因此我们将转置 data.frames 并在循环中切换维度。

DF1 <- t(DF1)
DF2 <- t(DF2)

for (M in 1:ncol(DF1)) {
  Test=cor(DF1[,M], DF2[,M], use="na.or.complete") 
  print(Test)
}

或使用sapply()

sapply(1:ncol(DF1), function(x) cor(DF1[,x], DF2[,x], use="na.or.complete"))

如果您尝试计算两个数据帧的行之间的相关性(总共 4 个相关性,每行 1 个相关性),您可以试试这个:

for (M in 1:nrow(DF1)) {
Test=cor(as.numeric(DF1[M,]),as.numeric(DF2[M,])) 
print(Test)
}

[1] 1
[1] 1
[1] NA
[1] NA