简而言之:
我想用我的桌子做这件事,
说明:
我有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)
这是一个简短的方法:
>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)
这是有效的,因为零的方差被解释为假.
如果有人尝试使用dplyr进行此操作,这是另一种方法:
library(dplyr)
mydf %>% select_if(~ length(unique(.)) > 1)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4840 次 |
最近记录: |