我有一个数据框,并希望创建一个只保留低相关变量的函数。这意味着查看每个变量与其余变量的成对相关性,对于其中至少一个相关系数大于0.4的那些变量,则从数据帧中取出该变量和高度相关的变量。
例如,假设我有一个数据框:
data <- data.frame(x1=rnorm(10), x2=rnorm(10), x3=runif(10), x4=runif(10,15,20))
cor(data, use="pairwise.complete.obs")
x1 x2 x3 x4
x1 1.00000000 -0.3325757 0.08567911 0.2651721
x2 -0.33257569 1.0000000 -0.18761301 0.4660056
x3 0.08567911 -0.1876130 1.00000000 -0.3321003
x4 0.26517210 0.4660056 -0.33210031 1.0000000
然后我想返回一个只保留x1和x3的数据帧(假设x2和x4的相关性为0.46)
答案 0 :(得分:3)
计算相关矩阵cd
,检查是否有>0.4
。
然后离开子集,忽略diag
onals,其中row==col
:
cd <- abs(cor(data, use="pairwise.complete.obs")) > 0.4
data[-unique(col(cd)[cd & row(cd) != col(cd)])]
答案 1 :(得分:2)
你可以尝试:
set.seed(50)
data <- data.frame(x1=rnorm(10), x2=rnorm(10), x3=runif(10), x4=runif(10,15,20))
mycor <- cor(data, use="pairwise.complete.obs")
data[, !apply(mycor, 2, function (x) max(x[-which.max(x)]) >.4 | min(x[which.min(x)]) < -.4) ]