J'essaie de renommer des colonnes de multiples Pour donner un exemple, disons que j'ai une liste de Cependant, cela ne " t Travailler comme prévu. Il semble que je n'atditais pas les nouveaux noms au Merci d'avance! P> p> data.frame code> s. data.frame code> s DFA code>, DFB code> et DFC code>. J'ai écrit une fonction Changenames code> pour définir les noms en conséquence, puis utilisé lapply code> comme suit: p> data.frame code>, mais crée uniquement les nouveaux noms. Qu'est-ce que je fais mal ici? P>
3 Réponses :
Il y a deux choses ici:
1) Vous devez renvoyer la valeur souhaitée à partir de votre fonction. Sinon, la dernière valeur sera renvoyée. Dans votre cas, c'est 2) Même en utilisant le Si vous souhaitez modifier par référence, vous pouvez utiliser noms (x) code>. Ainsi, vous devriez plutôt ajouter comme dernière ligne, retour (x) code> ou simplement x code>. Donc, votre fonction ressemblerait à: p>
Labayly code> ne modifie pas vos objets d'entrée par référence. Cela fonctionne sur une copie. Donc, vous devrez attribuer les résultats. Ou une autre alternative consiste à utiliser for-boucles code> au lieu de lapply code>: p>
pour la boucle code>, vous effectuerez toujours une copie (car noms (.) fait). Vous pouvez vérifier cela en utilisant tracemem code>. P> datable.table code > Fonction SETNAMES CODE> FONCTION: P> df <- data.frame(x=1:5, y=6:10, z=11:15)
require(data.table)
tracemem(df)
# [1] "<0x7f98ec76d7b0>"
setnames(df, c("A", "B", "C"))
tracemem(df)
# [1] "<0x7f98ec76d7b0>"
En utilisant cela comme fonction pour modifier les noms de colonne sur plusieurs cadres de données contenus dans une liste comme celle-ci était incroyablement utile. J'ai généralisé la fonction de prendre un deuxième et troisième argument et j'ai utilisé cela comme entrée pour un grep () code> pour modifier les noms de colonnes spécifiques dans toutes mes cadres de données.
Si les données de données n'étaient pas dans une liste, mais simplement dans l'environnement global, vous pouvez les renvoyer à l'aide d'un vecteur de noms de chaîne. EDIT P> P> Simplifiez le code ci-dessus que vous pouvez utiliser P> ou à l'aide de data.table code> qui ne nécessite pas de réaffectation. P> for(df in c("dfA", "dfB"))
data.table::setnames(get(df), c("G", "H"))
J'ai eu le problème de l'importation d'un ensemble de données public et de renommer chaque fichier de données et de renommer chaque colonne dans chaque fichier de données pour couper les succursales, les minuscules et les espaces internes avec des périodes.
Combinant les méthodes ci-dessus me a: < / p>
Après la ligne
noms (x) <- code> dans votre fonction, ajoutezretour (x) code> ou simplementx code>. D'autre, vous retournez justenoms (x) code>.Merci pour votre réponse ARUN! Si je reviendrai (x), je recevrai une extillon de DFA, de DFB et de DFC, avec les nouveaux noms. Mais si je considère les noms (DFA), les noms (DFB) et les noms (DFC), ils ont toujours les anciens noms de colonne. Mes cadres de données sont également très importants, donc je ne suis donc pas intéressé à les regarder. Ne changeant que des noms de colonne.
Labayly code> ne modifie pas l'entrée. Il n'y a pas de "changement par référence" qui se passe ici. Tout est fait sur une copie. Vous devrez attribuer le résultat. FAIRE:DFS <- PApply (DFS, Changenames) CODE>OK, DFS est maintenant une grande liste contenant DFA, DFB et DFC, avec les nouveaux noms de colonnes. Je suis toujours intéressé à travailler avec la DFA, DFB un DFC individuellement et individuellement, ils ont toujours les anciens noms de colonnes? Comment puis-je attribuer le résultat à la famille individuelle?
Eh bien, vous devriez les assigner.
DFA <- DFS [[1]] CODE> ...?