R: rbind trames de données avec un nom de colonne différent
j'ai 12 trames de données, chacun d'eux contient 6 colonnes: 5 ont le même nom, 1 est différent. Alors quand je l'appelle rbind() j'obtiens:
Error in match.names(clabs, names(xi)) :
names do not match previous names
La colonne qui diffère, c'est: "goal1Completions". Il y a 12 goalsCompletions... ils sont: "goal1Completions", "goal2Completions", "goal3Completions"... et ainsi de suite.
La meilleure façon que je peux penser, c'est: le fait de renommer chaque colonne, dans chaque bloc de données à "GoalsCompletions" et puis, à l'aide de "rbind()".
Est-il plus simple?
Chercher sur Google j'ai trouvé cette formule: "gtools". Il a une fonction appelée: "smartbind". Cependant, après l'utilisation de smartbind() je veux voir le bloc de données "Afficher()", mes R session plante...
Mes données (un exemple de la première trame de données):
date source medium campaign goal1Completions ad.cost Goal
1 2014-10-01 (direct) (none) (not set) 0 0.0000 Vida
2 2014-10-01 Master email CAFRE 0 0.0000 Vida
3 2014-10-01 apeseg referral (not set) 0 0.0000 Vida
df1, df2, df3,...etc
Il peut être préférable de les mettre dans une liste, puis faire rbindlist ie. rbindlist(mget(paste0('df',1:12)))
oui le modèle est:
Goal1_Costo,Goal2_Costo,... Goal12_Costo
. Si vous avez besoin de mettre à jour votre réponse, s'il vous plaît.Merci, mise à jour de la réponse
OriginalL'auteur Omar Gonzales | 2015-02-17
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
rbindlist
qui prend différents noms de colonne. À l'aide de @LyzandeR de donnéesMise à jour
Basé sur les noms des objets de la 12 jeux de données (c'est à dire 'Goal1_Costo', 'Goal2_Costo',..., 'Goal12_Costo'),
Il a
bind_rows
, mais encore les noms de colonne ne sera pas un problème. Ainsi, au lieu de 2 colonnes, la sortie sera 4. Selon?bind_rows
When row-binding, columns are matched by name, and any values that don't match will be filled with NA.
Merci à tous, mais j'ai fini avec cela, comme cela semble de plus en plus de plus simple. Cependant, je vais avoir besoin d'étudier un peu plus sur le mapplay fonctions...semble très puissant.
Un avantage de l'utilisation
rbindlist
est sa vitesse.OriginalL'auteur akrun
Mon préféré utiliser de
mapply
:Les Données De L'Exemple
et b
Solution
À l'aide de
mapply
:Et basé sur @Marat de commentaire ci-dessous:
Vous pouvez également faire
data.frame(mapply(c, a, b, SIMPLIFY=FALSE))
ou, alternativement,data.frame(Map(c,a,b))
pour éviter de données double.image-matrice de conversionVous pourriez éviter de données double.image-matrice de conversion par
data.frame(mapply(c, a, b, SIMPLIFY=FALSE))
ou, alternativement,data.frame(Map(c,a,b))
Oui, c'est le scénario de la fonction concatener et il ne garder le nom des colonnes à partir d'une. Chaque fois qu'il concatène les éléments (par exemple, les colonnes) des deux données.cadres et retourne une matrice à la fin.
Valide du point de Marat. Merci!
OriginalL'auteur LyzandeR
Je voudrais renommer les colonnes. C'est très facile avec
names()
si les colonnes sont dans le même ordre.ou
Résultat:
df3 <- data.frame(seven=61:70,eight=71:80,nine=81:90);res <- do.call(rbind,lapply(mget(paste0('df',1:3)), function(x) {colnames(x) <- colnames(df1);x})); row.names(res) <- NULL
OriginalL'auteur SethB