Objectif: modifier les noms de colonne de tous les cadres de données dans l'environnement global dans la liste suivante
noms de couleurs de ceux dans l'environnement global
Alors.
0) Les noms de colonne sont:
colnames = c("USAF","WBAN","YR--MODAHRMN")
1) J'ai les data.frames suivants: df1, df2.
2) Je les mets dans une liste:
dfList <- list(df1,df2)
3) Parcourez la liste:
for (df in dfList){
colnames(df)=colnames
}
Mais cela crée un nouveau df avec les noms de colonnes dont j'ai besoin, cela ne change pas les noms de colonnes d'origine dans df1, df2. Pourquoi? Lapply pourrait-il être une solution? Merci
Peut quelque chose comme:
lapply(dfList, function(x) {colnames(dfList)=colnames})
travail?
Avec lapply, vous pouvez le faire comme suit.
Créer des exemples de données:
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")
Ensuite, appliquez setNames
sur la liste et indiquez le vecteur des nouveaux noms de colonne en tant que second argument de setNames
:
lapply(dfList, setNames, colnames)
#[[1]]
# USAF WBAN YR--MODAHRMN
#1 1 2 3
#
#[[2]]
# USAF WBAN YR--MODAHRMN
#1 1 2 3
Modifier
Si vous souhaitez réattribuer les données.frames à l'environnement global, vous pouvez modifier le code comme suit:
dfList <- list(df1 = df1, df2 = df2)
list2env(lapply(dfList, setNames, colnames), .GlobalEnv)
Il suffit de changer votre boucle for en un index pour boucle comme ceci:
Les données
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")
Solution
for (i in seq_along(dflist)){
colnames(dflist[[i]]) <- colnames
}
Sortie
> 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
En utilisant for (df in dfList)
, vous créez essentiellement un nouveau fichier df à chaque fois et vous modifiez les noms de colonnes pour qu'ils conservent la liste d'origine (dfList
).
Si vous voulez que la boucle for
fonctionne, vous ne devez pas passer l'argument data.frame complet.
for (df in 1:length(dfList))
colnames(dfList[[df]]) <- colnames