在拥有大量NA的同时关联两个数据帧

时间:2018-10-26 09:54:07

标签: r for-loop correlation

假设我有两个数据框,其中包含许多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

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

通常在列上执行这样的操作通常会更直接,因此我们将转置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"))

答案 1 :(得分:0)

如果您尝试计算两个数据帧的行之间的相关性(总共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