我需要选择所有不是数字的列。我可以使用select_if
轻松选择所有数字列:
mtcars %>% select_if(is.numeric)
如果我想选择non-numeric
列,该怎么办?我试过了:
mtcars %>% select_if(!is.numeric)
但我收到以下错误消息:
Error in !is.numeric : invalid argument type
非常感谢您的帮助!
答案 0 :(得分:22)
如果您使用purrr
而非negate()
library(tidyverse)
的{{1}}
library(dplyr)
答案 1 :(得分:7)
如果你有一个合理的dplyr版本,你可以使用purrr风格的匿名函数:
library(dplyr)
iris %>% select_if(~!is.numeric(.x)) %>% head()
#> Species
#> 1 setosa
#> 2 setosa
#> 3 setosa
#> 4 setosa
#> 5 setosa
#> 6 setosa
或旧式funs
符号仍然有效,例如
iris %>% select_if(funs(!is.numeric(.))) %>% head()
#> Species
#> 1 setosa
#> 2 setosa
#> 3 setosa
#> 4 setosa
#> 5 setosa
#> 6 setosa
答案 2 :(得分:2)
一种可能的解决方案可能是:
df[, !(names(df) %in% names(df %>% select_if(is.numeric)))]
Example:
df <- data.frame(
name = c( "a", "b", "c", "d" ),
last_name = c( "r", "t", "s", "b" ),
x = c( 3, 2, 1, 2 ),
y = c( 4, 3, 4, 3 ),
z = c( 8, 9, 6, 7 ) , stringsAsFactors = FALSE)
> df[, !(names(df) %in% names(df %>% select_if(is.numeric)))]
# name last_name
#1 a r
#2 b t
#3 c s
#4 d b