如何使用dplyr仅选择少于n个级别的列(type = factor)?

Wla*_*tes 2 r dplyr

我有类似这样的问题:我想只选择低于"n"级别的列,我想我可以使用dplyr做到这一点,但我不知道如何.

以泰坦尼克号数据为例,其中str()我有3个因子有2个等级,1个因子有4个等级.我的意思是只选择少于4级的列.

str(as.data.frame(Titanic) %>% mutate_if(is.character, factor))

任何想法?

提前致谢.

Jas*_*lns 6

只需将函数传递给select_if,就像mutate_if- 请参阅?nlevels:

Titanic %>%
  as_data_frame() %>%
  mutate_if(is.character, factor) %>%
  select_if(~ nlevels(.) < 4)
Run Code Online (Sandbox Code Playgroud)

请注意,您也可以将其写为: select_if(function(x) nlevels(x) < 4)

  • @WlademirRibeiroPrates是的,你实际上可以将它简化为`select_if(is.factor)`或者你甚至可以只使用一个语句`select_if(~is.factor(.)&nlevels(.)<4)` (2认同)
  • 甚至可以编写`select_if(~length(unique(.))<4)`,它可以适用于所有类型. (2认同)