如何根据唯一值的数量选择列?

时间:2020-04-30 10:42:52

标签: r dplyr

我的回归分析给我带来麻烦,因为我的一个(或多个)自变量只有一个值。我没有时间检查100多个变量的因子水平数,所以我只想从我的数据集中排除所有只有一个值的变量。

我将如何去做?

我尝试了df<-df%>%select_if(length>1)df<-df%>%select_if(length()>1),但似乎都不起作用...。

3 个答案:

答案 0 :(得分:2)

虚构数据

df <- data.frame("a" = sample(1:100, 10), 
                 "b" = sample(1:100, 10),
                 "c" = rep(42, 10),
                 "d" = sample(LETTERS, 10))

确定是否唯一的功能

not_unique <- function(x) length(unique(x)) != 1
not_unique(df$a)
not_unique(df$c)

选择所需的列

df <- df %>% select_if(apply(df, 2, not_unique))

答案 1 :(得分:2)

这是一个data.table解决方案

dt[,.SD,.SDcols = dt[,lapply(.SD,uniqueN)]>1]

答案 2 :(得分:2)

在Base-R

df <- df[sapply(sapply(df,unique),length)>=2]

df[sapply(df, function(x) length(unique(x)))>=2]