如何使用dplyr :: select_if选择非数字列

zes*_*sla 13 r dplyr

我需要选择所有非数字的列.我可以使用select_if以下方法轻松选择所有数字列

mtcars %>% select_if(is.numeric)
Run Code Online (Sandbox Code Playgroud)

如果我想选择non-numeric列怎么办?我试过了:

mtcars %>% select_if(!is.numeric)
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误消息:

Error in !is.numeric : invalid argument type
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助!

MrF*_*ick 24

您可以使用purrrnegate(),如果你使用的是包含library(tidyverse)而不是只library(dplyr)

library(tidyverse)
iris %>% select_if(negate(is.numeric))
Run Code Online (Sandbox Code Playgroud)

  • 我非常喜欢这个.`base :: Negate`也有效! (4认同)

ali*_*ire 6

如果你有一个合理的最新版本的dplyr,你可以使用purrr风格的匿名函数:

library(dplyr)

iris %>% select_if(~!is.numeric(.x)) %>% head()
#>   Species
#> 1  setosa
#> 2  setosa
#> 3  setosa
#> 4  setosa
#> 5  setosa
#> 6  setosa
Run Code Online (Sandbox Code Playgroud)

或旧式funs符号仍然有效,例如

iris %>% select_if(funs(!is.numeric(.))) %>% head()
#>   Species
#> 1  setosa
#> 2  setosa
#> 3  setosa
#> 4  setosa
#> 5  setosa
#> 6  setosa
Run Code Online (Sandbox Code Playgroud)