Как выбрать нечисловые столбцы с помощью dplyr:: select if
мне нужно, чтобы выбрать все столбцы, которые не являются числовыми. Я могу легко выбрать все числовые столбцы с помощью select_if
:
mtcars %>% select_if(is.numeric)
Что делать, если я хочу выбрать non-numeric
столбцы? Я попробовал:
mtcars %>% select_if(!is.numeric)
но я получил сообщение об ошибке ниже:
Error in !is.numeric : invalid argument type
большое спасибо за помощь!
3 ответов
можно использовать purrr
' s negate()
который включен, если вы используете library(tidyverse)
а не просто library(dplyr)
library(tidyverse)
iris %>% select_if(negate(is.numeric))
вы можете использовать анонимную функцию в стиле муррр, при условии, что у вас есть достаточно недавняя версия dplyr:
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
одним из возможных решений может быть:
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