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 p>
J'ai un vecteur de cordes qui a le nom de pays
Puis j'ai lu un fichier Excel, dont le chemin est stocké dans un vecteur (fichier) déjà
Mais cela ne fonctionne pas et me donne une erreur p>
en CNTS [2] <- DF
Nombre d'éléments à remplacer n'est pas un multiple de longueur de remplacement p>
blockQuote>
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 em> renommer dataframes? P> CNTS <- C ("DE", "AR", "FR") CODE> P>
df <- lisez.xlsx (fichier [1], 1) code>
Maintenant je veux renommer DF au premier élément du vecteur des pays, alors je fais
CNTS [1] <- DF CODE> P>
3 Réponses :
Vous pouvez Utiliser cnts [1] signifie que vous avez essayé stocke un fichier de données dans une chaîne de longueur 1 "de" . 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
Totalement en ligne avec vous. OP devrait regarder dans listes code> ou d'autres structures de données.
avec au lieu de Vous vous retrouverez avec quelque chose comme l'objet suivant: p> Si vous voulez être très efficace, vous pouvez également faire quelque chose comme ça, en supposant Les noms dans 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: 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> CNTS code> et les noms de fichier dans Fichier CODE> Match positionnemal: p> df_list <- lapply(file, read.xlsx)
names(df_list) <- cnts
J'aime vos conseils, mais pour quelqu'un de nouveau à listes, `noms <-` (Vector (mode =" Liste ", longueur = longueur (CNTS)), CNTS) code> serait extrêmement déroutant - et Muddies Le fait que la manière d'initialiser une liste serait df_list <- liste () code> (ou utilisez acadrable code>). Pourquoi non seulement nommer la liste après le remplir, avec un nom de noms standard (df_list) <- CNTS code>?
@Gregor bon point. Correction de la pièce avec les noms <- () code>, mais je ne suis pas d'accord sur l'utilisation de Vecteur code> 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 code>.
Une autre option consiste à lire tous les jeux de données dans une liste code> code>, définissez les noms de la liste code> code> d'éléments avec 'CNTS' (en supposant que c'est le même ordre) et polluer L'environnement global avec beaucoup d'objets ( list2env code>)
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.)