r dataframe

Cambiar nombres de columna en una lista de marcos de datos en R



dataframe (3)

Objetivo: cambiar los nombres de columna de todos los marcos de datos en el entorno global de la siguiente lista

colnames de los del entorno global

Entonces.

0) Los nombres de columna son:

colnames = c("USAF","WBAN","YR--MODAHRMN")

1) Tengo los siguientes data.frames: df1, df2.

2) Los puse en una lista:

dfList <- list(df1,df2)

3) Recorrer la lista:

for (df in dfList){ colnames(df)=colnames }

Pero esto crea un nuevo df con los nombres de columna que necesito, no cambia los nombres de columna originales en df1, df2. ¿Por qué? ¿Podría ser una solución? Gracias

Puede algo como:

lapply(dfList, function(x) {colnames(dfList)=colnames})

¿trabajo?


Con lapply puedes hacerlo de la siguiente manera.

Crear datos de muestra:

df1 <- data.frame(A = 1, B = 2, C = 3) df2 <- data.frame(X = 1, Y = 2, Z = 3) dfList <- list(df1,df2) colnames <- c("USAF","WBAN","YR--MODAHRMN")

Luego, pase la lista usando setNames y proporcione el vector de nuevos nombres de columna como segundo argumento para setNames :

lapply(dfList, setNames, colnames) #[[1]] # USAF WBAN YR--MODAHRMN #1 1 2 3 # #[[2]] # USAF WBAN YR--MODAHRMN #1 1 2 3

Editar

Si desea asignar los data.frames al entorno global, puede modificar el código de esta manera:

dfList <- list(df1 = df1, df2 = df2) list2env(lapply(dfList, setNames, colnames), .GlobalEnv)


Si desea que el bucle for funcione, no debe pasar todo el data.frame como argumento.

for (df in 1:length(dfList)) colnames(dfList[[df]]) <- colnames


Simplemente cambie su ciclo for en un índice for-loop como este:

Datos

df1 <- data.frame(a=runif(5), b=runif(5), c=runif(5)) df2 <- data.frame(a=runif(5), b=runif(5), c=runif(5)) dflist <- list(df1,df2) colnames = c("USAF","WBAN","YR--MODAHRMN")

Solución

for (i in seq_along(dflist)){ colnames(dflist[[i]]) <- colnames }

Salida

> dflist [[1]] USAF WBAN YR--MODAHRMN 1 0.8794153 0.7025747 0.2136040 2 0.8805788 0.8253530 0.5467952 3 0.1719539 0.5303908 0.5965716 4 0.9682567 0.5137464 0.4038919 5 0.3172674 0.1403439 0.1539121 [[2]] USAF WBAN YR--MODAHRMN 1 0.20558383 0.62651334 0.4365940 2 0.43330717 0.85807280 0.2509677 3 0.32614750 0.70782919 0.6319263 4 0.02957656 0.46523151 0.2087086 5 0.58757198 0.09633181 0.6941896

Al usar for (df in dfList) esencialmente está creando un nuevo df cada vez y cambia los nombres de columna a los que dejan intacta la lista original ( dfList ).