Nom des colonnes au sein de l'agrégat dans la R
Je sais que je peux *re*nom des colonnes après je agréger les données:
blubb <- aggregate(dat$two ~ dat$one, ...)
colnames(blubb) <- c("One", "Two")
Rien de mal à cela. Mais est-il un moyen de regrouper et nommer les colonnes en une seule fois? Un peu comme:
blubb <- aggregate( ... , cols = c("One", "Two"))
Il serait j'ai particulièrement aimé nice (et typo-proof) pour en quelque sorte attraper l'origine des noms de colonne et de faire comme:
blubb <- aggregate( ... , cols = c(name_of_dat$one, name_of_dat$two."_Mean"))
- R les bibliothèques et les fonctions de suivre une grande variété de "styles". Lorsque je les regarde, collectivement, je vois peu de preuves de bonne programmation de l'API de dessin. J'adore ce que vous pouvez faire avec R, mais je déteste à quoi ressemble le code. Cette question est l'une des dizaines (ou des centaines) des exemples de R la folie.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
setNames
comme dans:Sinon, vous pouvez contourner la nappe méthode de la formule, et d'utiliser une syntaxe du type:
Mise à jour
Cette mise à jour est de tout simplement vous aider à démarrer sur la dérivation d'une solution sur votre propre.
Si vous examinez le code pour
stats:::aggregate.formula
, vous verrez les lignes suivantes vers la fin:Si tout ce que vous voulez faire est d'ajouter le nom de la fonction à la variable qui a été agrégées, peut-être que vous pouvez le changer pour quelque chose comme:
Ce essentiellement de capture de la valeur entrée pour
FUN
en utilisantdeparse(substitute(FUN))
, de sorte que vous pouvez probablement modifier la fonction pour accepter un suffixe personnalisé, ou peut-être même un vecteur de suffixes. Cela peut probablement être améliorée un peu avec un peu de travail, mais je ne vais pas le faire!Ici est un Résumé avec ce concept, la création d'une fonction nommée "myAgg".
Voici quelques exemple de sortie seulement de la colonne résultante noms:
Avis que seules les données agrégées de la variable nom de modifications. Mais remarquez aussi que si vous utilisez une fonction personnalisée, vous aurez une bien drôle de nom de colonne!
aggregate
, qui ajoute la fonction appliquée à l'ensemble de la colonne nom. Je ne suis pas le poster dans ma réponse, car il n'limiter la fonctionnalité deaggregate
un peu, et c'était juste écrit pour un projet sur lequel je travaillais.blubb <- aggregate(One = dat$one, Two = dat$two, data=dat...)
dat$
si vous spécifiezdata=dat
(ce qui est un argument pour laformula
méthode pouraggregate
, pas la méthode que vous proposez ici). Si je suis absent quelque chose, faites-le moi savoir. Merci!La réponse à votre première question est oui. Vous pouvez certainement inclure les noms de colonne dans la fonction d'agrégation. En utilisant le nom de votre exemple ci-dessus:
blubb <- aggregate(dat,list(One=dat$One,Two=dat$Two),sum)
J'aime bien la partie sur une éventuelle tirant sur l'origine des noms de colonne automatiquement. Si je l'ai trouver je vais le poster.
sum
? Maintenant, c'est justex
Dans le cas où vous visez plutôt l'écriture aggreagtes comme
formula
la documentation montre l'utilisation decbind
. Etcbind
vous permet de nommer ses arguments, qui sont utilisés paraggregate
.Agrégation de plus d'une colonne de plus d'un groupement facteur qui pourrait être fait comme:
et si vous voulez utiliser plus d'une fonction:
qui ajoute à la colname l'utilisé globale de la fonction.
Mais
cbind
remplacefactors
par leurs codes internes. Pour éviter cela, vous pouvez utiliser: