看起来像这样的框架:
Col1 Col2 Col3
0 3 25
45 0 0
0 0 12
我想计算元素之间的相关指数只有当两个元素是 != 从 0 因为在我的情况下 0 是“非信息项”所以计算例如:3 是信息和 0 之间的相关性是没有意义的这不是信息。
我不能简单地删除包含 0 个元素的列,因为我的 data.frame 中有 0 个元素是稀疏的。
看起来像这样的框架:
Col1 Col2 Col3
0 3 25
45 0 0
0 0 12
我想计算元素之间的相关指数只有当两个元素是 != 从 0 因为在我的情况下 0 是“非信息项”所以计算例如:3 是信息和 0 之间的相关性是没有意义的这不是信息。
我不能简单地删除包含 0 个元素的列,因为我的 data.frame 中有 0 个元素是稀疏的。
您正在寻找的一半use = "pairwise.complete.obs"
在cor
:
如果
use
具有值“pairwise.complete.obs”,则使用对这些变量的所有完整观测值对计算每对变量之间的相关性或协方差。
但是,它需要有NA
值而不是零,所以让我们首先转换我们的数据:
data <- data.frame(x = c(1, 0, -1, 0, 1),
y = c(-1, 0, 1, -1, 0),
z = c(0, 0, 1, -1, -1))
data
# x y z
# 1 1 -1 0
# 2 0 0 0
# 3 -1 1 1
# 4 0 -1 -1
# 5 1 0 -1
tempData <- data
tempData[tempData == 0] <- NA
tempData
# x y z
# 1 1 -1 NA
# 2 NA NA NA
# 3 -1 1 1
# 4 NA -1 -1
# 5 1 NA -1
最后:
cor(tempData, use = "pairwise.complete.obs")
# x y z
# x 1 -1 -1
# y -1 1 1
# z -1 1 1