varias superponer studio modificar graficos graficas ejes r dplyr na

superponer - Una función para rellenar una columna con NA del mismo tipo



superponer graficas en r (5)

Otra forma de cambiar todas las columnas a la vez manteniendo las clases de las variables:

df[] <- lapply(df, function(x) {type <- class(x); x <- NA; class(x) <- type; x}) df # A tibble: 3 x 2 # x y # <dbl> <chr> #1 NA <NA> #2 NA <NA> #3 NA <NA>

Como @digEmAll notificó en los comentarios, hay otra forma similar pero más corta:

df[] <- lapply(df, function(x) as(NA,class(x)))

Tengo un marco de datos con muchas columnas de diferentes tipos. Me gustaría reemplazar cada columna con NA de la clase correspondiente.

por ejemplo:

df = data_frame(x = c(1,2,3), y = c("a", "b", "c")) df[, 1:2] <- NA

produce un marco de datos con dos columnas lógicas, en lugar de numérico y carácter. Sé que puedo decir R:

df[,1] = as.numeric(NA) df[,2] = as.character(NA)

¿Pero cómo hago esto colectivamente en un bucle para todas las columnas con todos los tipos posibles de NA?


Otra solución que se aplica a todas las columnas puede ser especificar las no-NA y reemplazarlas por NA, es decir,

df[!is.na(df)] <- NA

lo que da,

# A tibble: 3 x 2 x y <dbl> <chr> 1 NA <NA> 2 NA <NA> 3 NA <NA>


Puedes usar este "truco":

df[1:nrow(df),1] <- NA df[1:nrow(df),2] <- NA

el [1:nrow(df),] básicamente le dice a R que reemplace todos los valores en la columna con NA y de esta manera el NA lógico es obligado al tipo original de la columna antes de reemplazar los otros valores.

Además, si tiene muchas columnas para reemplazar y el data_frame tiene muchas filas, sugiero almacenar los índices de las filas y reutilizarlos:

rowIdxs <- 1:nrow(df) df[rowIdxs ,1] <- NA df[rowIdxs ,2] <- NA df[rowIdxs ,3] <- NA ...

Según lo sugerido por @RonakShah , también puede usar:

df[TRUE, 1] <- NA df[TRUE, 2] <- NA ...

Como lo señaló @Cath ambos métodos aún funcionan cuando selecciona más de una columna, por ejemplo:

df[TRUE, 1:3] <- NA # or df[1:nrow(df), 1:3] <- NA


Usando bind_cols() de dplyr también puedes hacer:

df <- data_frame(x = c(1,2,3), y = c("a", "b", "c")) classes <- sapply(df, class) df[,1:2] <- NA bind_cols(lapply(colnames(x), function(x){eval(parse(text=paste0("as.", classes[names(classes[x])], "(", df[,x],")")))})) V1 V2 <dbl> <chr> 1 NA NA 2 NA NA 3 NA NA

Tenga en cuenta que esto cambiará los nombres de los collares.


Usando dplyr :: na_if :

library(dplyr) df %>% mutate(x = na_if(x, x), y = na_if(y, y)) # # A tibble: 3 x 2 # x y # <dbl> <chr> # 1 NA NA # 2 NA NA # 3 NA NA

Si queremos mutar solo un subconjunto de columnas a NA , entonces:

# dataframe with extra column that stay unchanged df = data_frame(x = c(1,2,3), y = c("a", "b", "c"), z = c(4:6)) df %>% mutate_at(vars(x, y), funs(na_if(.,.))) # # A tibble: 3 x 3 # x y z # <dbl> <chr> <int> # 1 NA NA 4 # 2 NA NA 5 # 3 NA NA 6