在具有大量 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
假设我有两个数据帧,其中包含许多 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