如何删除R中具有相同值的列

Dev*_*Dev 11 r

简而言之:

我想用我的桌子做这件事,

在此输入图像描述

说明:

我有20000 x 1,200项的大桌子.我想从顶部到底部删除所有具有相同值的列.但它不应该更改变量名称(示例中的V2),以便稍后我可以找出它们被删除的那个.

A5C*_*2T1 18

只需用来vapply检查每列中有多少个唯一值:

样本数据:

mydf <- data.frame(v1 = 1:4, v2 = 5:8,
                   v3 = 2, v4 = 9:12, v5 = 1)
mydf
##   v1 v2 v3 v4 v5
## 1  1  5  2  9  1
## 2  2  6  2 10  1
## 3  3  7  2 11  1
## 4  4  8  2 12  1
Run Code Online (Sandbox Code Playgroud)

我们将做什么vapply:

vapply(mydf, function(x) length(unique(x)) > 1, logical(1L))
#    v1    v2    v3    v4    v5 
#  TRUE  TRUE FALSE  TRUE FALSE 
Run Code Online (Sandbox Code Playgroud)

保留所需的列:

mydf[vapply(mydf, function(x) length(unique(x)) > 1, logical(1L))]
#   v1 v2 v4
# 1  1  5  9
# 2  2  6 10
# 3  3  7 11
# 4  4  8 12
Run Code Online (Sandbox Code Playgroud)


Nea*_*ltz 9

这是一个简短的方法:

>Filter(var, mydf)
  v1 v2 v4
1  1  5  9
2  2  6 10
3  3  7 11
4  4  8 12
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为零的方差被解释为假.


zee*_*hio 5

如果有人尝试使用dplyr进行此操作,这是另一种方法:

library(dplyr)
mydf %>% select_if(~ length(unique(.)) > 1)
Run Code Online (Sandbox Code Playgroud)