过滤dplyr(R)中的命名向量

时间:2019-04-17 14:55:04

标签: filter dplyr sapply

我正在尝试找到一种使用dplyr将二进制数值变量转换为因子的快速方法。

我有一个具有以下结构的数据集:

library(dplyr)
f<-as_tibble(data.frame(col1=c(1,1,0),col2=c("ham","spam","spam"),col3=c(1,2,8),col4=c(1,0,0)))

目前,我尝试使用n_distinct

g<-f %>% select_if(is.numeric) %>% sapply(n_distinct) 

但是我不知道如何使用n_distinct == 2仅过滤掉那些列。需要明确的是,我的最终输出应该是:

names(g[g==2])

[1] "col1" "col4"

有什么主意吗? 谢谢

1 个答案:

答案 0 :(得分:1)

如何使用select_if并定义一个函数来检查该列是否为数字以及distint值的数量是否恰好为2。请尝试:

f %>% 
  select_if(~n_distinct(.) == 2 & is.numeric(.)) %>% 
  names()

哪个给你:

[1] "col1" "col4"