varias superponer studio lineas graficos graficas datos agrupar r

superponer - Seleccionar solo columnas numéricas de un marco de datos



superponer graficas en r (8)

EDITAR: actualizado para evitar el uso de sapply mal aconsejado.

Como un marco de datos es una lista, podemos usar las funciones de aplicar listas:

nums <- unlist(lapply(x, is.numeric))

Luego subconjunto estándar

x[ , nums] ## don''t use sapply, even though it''s less code ## nums <- sapply(x, is.numeric)

Para una R moderna más idiomática, ahora recomendaría

x[ , purrr::map_lgl(x, is.numeric)]

Menos codiciosos, menos reflectantes peculiaridades de R, y más sencillo, y robusto para usar en tibbles de base de datos:

dplyr::select_if(x, is.numeric)

Supongamos que tiene un marco de datos como este:

x <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20])

¿Cómo seleccionarías solo aquellas columnas en x que son numéricas?


Este es un código alternativo a otras respuestas:

x[, sapply(x, class) == "numeric"]

con un data.table

x[, lapply(x, is.numeric) == TRUE, with = FALSE]


Esto no responde directamente la pregunta, pero puede ser muy útil, especialmente si desea algo así como todas las columnas numéricas, excepto su columna de identificación y su variable dependiente.

numeric_cols <- sapply(dataframe, is.numeric) %>% which %>% names %>% setdiff(., c("id_variable", "dep_var")) dataframe %<>% dplyr::mutate_at(numeric_cols, function(x) your_function(x))


La biblioteca PCAmixdata tiene functon splitmix que divide cuantitativo (datos numéricos) y cualitativo (datos categóricos) de un marco de datos dado "YourDataframe" como se muestra a continuación:

install.packages("PCAmixdata") library(PCAmixdata) split <- splitmix(YourDataframe) X1 <- split$X.quanti(Gives numerical columns in the dataset) X2 <- split$X.quali (Gives categorical columns in the dataset)


La función select_if( ) del paquete select_if( es una solución elegante:

library("dplyr") select_if(x, is.numeric)


Si tiene muchas variables de factor, puede usar select_if . instalar los paquetes dplyr. Hay muchas funciones que separan los datos al satisfacer una condición. puedes establecer las condiciones.

Úselo así

categorical<-select_if(df,is.factor) str(categorical)


en caso de que solo le interesen los nombres de las columnas, utilice esto:

names(dplyr::select_if(train,is.numeric))


Filter() del paquete base es la función perfecta para ese caso de uso: simplemente debe codificar:

Filter(is.numeric, x)

También es mucho más rápido que select_if() :

library(microbenchmark) microbenchmark( dplyr::select_if(mtcars, is.numeric), Filter(is.numeric, mtcars) )

devuelve (en mi computadora) una mediana de 60 microsegundos para Filter , y 21 000 microsegundos para dplyr (350x más rápido).