seleccionar insertar filas eliminar datos data contar columna column r dataframe add

insertar - ¿Cómo agregar una nueva columna entre otras columnas de dataframe?



seleccionar datos en r (4)

En 2 pasos, puede reordenar las columnas:

dat$C <- NA dat <- dat[, c("A", "C", "B")] A C B 1 0.596068 NA -0.7783724 2 -1.464656 NA -0.8425972

También puedes usar append

dat <- data.frame(A = rnorm(2), B = rnorm(2)) as.data.frame(append(dat, list(C = NA), after = 1)) A C B 1 -0.7046408 NA 0.2117638 2 0.8402680 NA -2.0109721

Quiero agregar una nueva columna con "NA" en mi marco de datos:

A B 1 14379 32094 2 151884 174367 3 438422 449382

Pero necesito que esté ubicado entre col. A y B, como este:

A C B 1 14379 NA 32094 2 151884 NA 174367 3 438422 NA 449382

Sé cómo agregar col. C después de col. B, pero eso no es útil para mí ... ¿Alguien sabe cómo hacerlo? ¡¡¡Gracias!!!


Escribí una función para anexar columnas sobre (en) un data.frame. También le permite nombrar la columna, y hace algunas comprobaciones ...

append_col <- function(x, cols, after=length(x)) { x <- as.data.frame(x) if (is.character(after)) { ind <- which(colnames(x) == after) if (any(is.null(ind))) stop(after, "not found in colnames(x)/n") } else if (is.numeric(after)) { ind <- after } stopifnot(all(ind <= ncol(x))) cbind(x, cols)[, append(1:ncol(x), ncol(x) + 1:length(cols), after=ind)] }

ejemplos:

# create data df <- data.frame("a"=1:5, "b"=6:10) # append column append_col(df, list(c=1:5)) # append after an column index append_col(df, list(c=1:5), after=1) # or after a named column append_col(df, list(c=1:5), after="a") # multiple columns / single values work as expected append_col(df, list(c=NA, d=4:8), after=1)

(Una ventaja de invocar cbind al final de la función e indización es que los caracteres dentro del data.frame no se fuerzan a factores como sería el caso si se usa as.data.frame(append(x, cols, after=ind)) )


Si usa data.table puede usar la función setcolorder . Tenga en cuenta que NA se almacena como variable lógica, si desea que la columna se inicie como una columna entera, doble o de caracteres, puede usar NA_integer , NA_real_ o NA_character_

p.ej

library(data.table) DT <- data.table(DF) # add column `C` = NA DT[, C := NA] setcolorder(DT, c(''A'',''C'',''B'')) DT ## A C B ## 1: 14379 NA 32094 ## 2: 151884 NA 174367 ## 3: 438422 NA 449382

Podrías hacer esto en una línea

setcolorder(DT[, C: = NA], c(''A'',''B'',''C''))


También puedes usar el paquete tibble, que tiene una función muy interesante (entre muchas otras) para eso: add_column ()

library(tibble) df <- data.frame("a" = 1:5, "b" = 6:10) add_column(df, c = rep(NA, nrow(df)), .after = 1)

Esa función es fácil de usar, y puede usar el argumento .antes de hacerlo.