假设我有两个数据框,其中包含许多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
我在做什么错了?
答案 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