Saltar al contenido

R: eliminar varias columnas vacías de variables de caracteres

Recabamos en distintos sitios para así traerte la solución para tu duda, si tienes preguntas déjanos la duda y responderemos con gusto, porque estamos para ayudarte.

Solución:

Si sus columnas vacías son De Verdad columnas de caracteres vacías, algo como lo siguiente debería funcionar. Deberá modificarse si sus columnas de caracteres “vacías” incluyen, por ejemplo, espacios.

Data de muestra:

mydf <- data.frame(
  A = c("a", "b"),
  B = c("y", ""),
  C = c("", ""),
  D = c("", ""),
  E = c("", "z")
)
mydf
#   A B C D E
# 1 a y      
# 2 b       z

Identificar y eliminar las columnas "vacías".

mydf[!sapply(mydf, function(x) all(x == ""))]
#   A B E
# 1 a y  
# 2 b   z

Alternativamente, según lo recomendado por @Roland:

> mydf[, colSums(mydf != "") != 0]
  A B E
1 a y  
2 b   z

Puede hacer cualquiera de las siguientes cosas:

emptycols <- sapply(df, function (k) all(is.na(k)))
df <- df[!emptycols]

o:

emptycols <- colSums(is.na(df)) == nrow(df)
df <- df[!emptycols]

Si por vacío quiere decir que están ""el segundo enfoque se puede adaptar así:

emptycols <- colSums(df == "") == nrow(df)

Si está hablando de columnas donde todos los valores son NAutilizar remove_empty("cols") del paquete del conserje.

Si tiene vectores de caracteres donde cada valor es el vacío string ""primero puede convertir esos valores a NA a lo largo de su data.frame con na_if del paquete dplyr:

dat <- data.frame(
  x = c("a", "b", "c"),
  y = c("", "", ""),
  z = c(NA, NA, NA),
  stringsAsFactors = FALSE
)

dat
#>   x y  z
#> 1 a   NA
#> 2 b   NA
#> 3 c   NA

library(dplyr)
library(janitor)

dat %>%
  mutate_all(funs(na_if(., ""))) %>%
  remove_empty("cols")
#>   x
#> 1 a
#> 2 b
#> 3 c

Si eres capaz, puedes dejar una crónica acerca de qué le añadirías a esta sección.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *