0
votes

Modifier le nom de Dataframe basé sur un vecteur de chaîne

Je lis je lis un couple de fichiers Excel d'un répertoire et je veux que le Dataframe soit lu pour être nommé de manière dynamique selon un vecteur de chaînes

J'ai un vecteur de cordes qui a le nom de pays CNTS <- C ("DE", "AR", "FR")

Puis j'ai lu un fichier Excel, dont le chemin est stocké dans un vecteur (fichier) déjà df <- lisez.xlsx (fichier [1], 1) Maintenant je veux renommer DF au premier élément du vecteur des pays, alors je fais CNTS [1] <- DF

Mais cela ne fonctionne pas et me donne une erreur

en CNTS [2] <- DF Nombre d'éléments à remplacer n'est pas un multiple de longueur de remplacement

Je veux que le DF soit renommé comme de Je connais le problème, il tente d'écrire tout le DF à un vecteur de chaîne à la position 1, mais comment puis-je dynamiquement renommer dataframes?


1 commentaires

Je ne comprends pas ce dont vous avez besoin. Vous voulez une variable nommée "de" qui contiendra le cadre de données DF? (et la deuxième variable est "AR" qui contient la deuxième trame de données, etc.)


3 Réponses :


2
votes

cnts [1] signifie que vous avez essayé stocke un fichier de données dans une chaîne de longueur 1 "de" .

Vous pouvez Utiliser Attribuer code>, vous devez lire Pourquoi utiliser Attribuer est mauvais P>

cnts <- c("de", "ar", "fr")

df <- data.frame(a=1:5)

assign(cnts[1], df)
de


1 commentaires

Totalement en ligne avec vous. OP devrait regarder dans listes ou d'autres structures de données.



2
votes

avec CNTS [1] Vous indiquez à r Ajouter un DataFrame au premier élément du vecteur de caractères CNTS code>, ce qui n'est pas possible. Vous pouvez utiliser Attribuer code> pour obtenir ce que vous voulez, mais le consensus général est que Attribuer code> doit être évité, en particulier lors de l'importation de plusieurs fichiers multiples. Cela pourrait être un peu contre-intuitif au début, mais il est souvent plus logique de mettre vos données de données dans des listes nommées, par exemple: xxx pré>

au lieu de df_list Vous pouvez également utiliser df_list , mais le premier est plus efficace, d'autant plus que vos listes sont plus nombreuses. Vous pouvez utiliser soit dans votre cas, mais il n'est jamais trop tôt pour apprendre de bonnes habitudes qui vous épargneront de la frustration sur la route. p>

Vous vous retrouverez avec quelque chose comme l'objet suivant: p> xxx pré>

Si vous voulez être très efficace, vous pouvez également faire quelque chose comme ça, en supposant Les noms dans CNTS code> et les noms de fichier dans Fichier CODE> Match positionnemal: p>

df_list <- lapply(file, read.xlsx)
names(df_list) <- cnts


2 commentaires

J'aime vos conseils, mais pour quelqu'un de nouveau à listes, `noms <-` (Vector (mode =" Liste ", longueur = longueur (CNTS)), CNTS) serait extrêmement déroutant - et Muddies Le fait que la manière d'initialiser une liste serait df_list <- liste () (ou utilisez acadrable ). Pourquoi non seulement nommer la liste après le remplir, avec un nom de noms standard (df_list) <- CNTS ?


@Gregor bon point. Correction de la pièce avec les noms <- () , mais je ne suis pas d'accord sur l'utilisation de Vecteur car ce n'est pas une grande pratique de faire pousser des vecteurs. Je l'ai toutefois développé sur la pièce avec labraque .



0
votes

Une autre option consiste à lire tous les jeux de données dans une liste , définissez les noms de la liste d'éléments avec 'CNTS' (en supposant que c'est le même ordre) et polluer L'environnement global avec beaucoup d'objets ( list2env ) xxx


0 commentaires