r - 有没有办法删除 R 中几乎重复的列
问题描述
dplyr 中是否有删除几乎重复的列的方法?例如,我想删除以下 tibble 中重复率大于 75% 的列。这将删除 b 列和 c 列,但不会删除 d 列,因为它与任何其他列只有 60% 相同。
tibble(
a = c(1,2,3,4,5),
b = c(1,2,3,4,5),
c = c(1,2,3,4,4),
d = c(1,2,3,6,6)
)
解决方案
dplyr
老实说,我认为最好不要这样做。其中许多功能可以用purrr
/ -变体替换tidyr
,但我认为在dplyr
.
Z <- tibble(
a = c(1,2,3,4,5),
b = c(1,2,3,4,5),
c = c(1,2,3,4,4),
d = c(1,2,3,6,6)
)
eg <- expand.grid(seq_len(ncol(Z)), seq_len(ncol(Z)))
eg <- eg[ eg$Var1 < eg$Var2, ]
eg
# Var1 Var2
# 5 1 2
# 9 1 3
# 10 2 3
# 13 1 4
# 14 2 4
# 15 3 4
eg$similarity <- mapply(function(i,j) sum(Z[,i] == Z[,j]) / nrow(Z), eg$Var1, eg$Var2)
eg
# Var1 Var2 similarity
# 5 1 2 1.0
# 9 1 3 0.8
# 10 2 3 0.8
# 13 1 4 0.6
# 14 2 4 0.6
# 15 3 4 0.6
unique(eg$Var2[ eg$similarity >= 0.75 ])
# [1] 2 3
Z[, -unique(eg$Var2[ eg$similarity >= 0.75 ]) ]
# # A tibble: 5 x 2
# a d
# <dbl> <dbl>
# 1 1 1
# 2 2 2
# 3 3 3
# 4 4 6
# 5 5 6
推荐阅读
- wordpress - 在 Wordpress 的页面上创建有效的 RSS 提要
- d3.js - d3.js - 在强制导向图中 alpha < 0.5 后停止内部刻度
- python - Pandas 快速迭代行的最佳方法
- redirect - 网址将第一个路径段重写为子域
- bash - 使用 run-this-one 运行的 Linux 脚本不适用于 docker
- django - Django Redirect 返回 200,但页面不重定向
- c++ - 找不到 CMAKE_Fortran_COMPILER
- ssl - 强制浏览器检索新 SSL 证书的最佳方法是什么?
- laravel - Laravel Nova - 如何修改度量值和分区以查询镜头数据视图
- javascript -