我有以下类型(但是非常多的变量和 ind)数据:
mydf <- data.frame (Inv = 1:6, varA = c(1,1,1, 0,1,1),
varB = c(1,0,1, 0, 1,1), varC = c(1,0,0, 0,1,1), varD = c(1,1,1, 0,1,1),
varE = c(1,0,1, 0, 1,1), varF = c(1,1,1, 0, 1,1))
mydf
Inv varA varB varC varD varE varF
1 1 1 1 1 1 1 1
2 2 1 0 0 1 0 1
3 3 1 1 0 1 1 1
4 4 0 0 0 0 0 0
5 5 1 1 1 1 1 1
6 6 1 1 1 1 1 1
我想进行所有一对一的比较(变量和个人/主题),如果它们是重复的,并且重复的个人/变量的名称作为日志保存到不同的文件中,则只保留一个:
例如在上面的数据中:
在变量中:
varA is exactly same as varD and varF - so I will just keep varA only in new data
mydf$varA == mydf$varE
[1] TRUE TRUE TRUE TRUE TRUE TRUE
varB and varE has exactly same data - so I will just keep varB
varC is unique
在 Inv(即主题)中:
1, 5 and 6 are same -> so just keep 1
因此产生的输出文件是
mydf <- data.frame (Inv = 1:4, varA = c(1,1,1, 0),
varB = c(1,0,1, 0), varC = c(1,0,0, 0))
Inv varA varB varC
1 1 1 1 1
2 2 1 0 0
3 3 1 1 0
4 4 0 0 0
我可以通过相关矩阵找到重复:
cor(mydf[,-1])
varA varB varC varD varE varF
varA 1.0000000 0.6324555 0.4472136 1.0000000 0.6324555 1.0000000
varB 0.6324555 1.0000000 0.7071068 0.6324555 1.0000000 0.6324555
varC 0.4472136 0.7071068 1.0000000 0.4472136 0.7071068 0.4472136
varD 1.0000000 0.6324555 0.4472136 1.0000000 0.6324555 1.0000000
varE 0.6324555 1.0000000 0.7071068 0.6324555 1.0000000 0.6324555
varF 1.0000000 0.6324555 0.4472136 1.0000000 0.6324555 1.0000000
我们可以自动化这个过程吗?
最佳答案
您也可以使用 findCorrelation
来自 caret
包裹:
findCorrelation(x, cutoff = .90, verbose = FALSE)
其中输出是表示要删除的列的索引向量。
关于r - 如何删除r中的相关或重复变量或个体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10802592/