Grouper par plusieurs colonnes et additionner d'autres colonnes multiples
J'ai un bloc de données avec environ 200 colonnes, hors d'eux, je veux du groupe de la table par le premier 10 ou si des facteurs et de la somme, le reste des colonnes.
J'ai la liste de tous les noms de colonnes qui je veux du groupe et la liste de tous les cols qui je veux globale.
Le format de sortie que je recherche doit être la même dataframe, avec le même nombre de cols, juste regroupées.
Est-il une solution en utilisant les paquets data.table
plyr
ou autre?
source d'informationauteur user1042267
Vous devez vous connecter pour publier un commentaire.
La les données.table:
ou
où
.SD
est le (S)ubset de (D)ata à l'exclusion de groupe de colonnes. (Aparté: Si vous avez besoin de se référer à un groupe de colonnes, de manière générique, ils sont dans.BY
.)Cela semble être une tâche pour ddply (j'utilise le 'baseball' dataset qui est inclus avec plyr):
Cela donne par groupColumns la somme des colonnes spécifiées dans dataColumns.
Dans la base de R ce serait...
MODIFIER:
La fonction d'agrégation a parcouru un long chemin depuis que j'ai écrit cela. Aucun casting ci-dessus est nécessaire.
Et il ya une variété de façons d'écrire cela. En supposant que les 10 premières colonnes sont nommées
a1
para10
j'aime le suivant, même si elle est détaillé.(Vous pouvez utiliser une pâte pour construire la formule et l'utilisation
formula
)À l'aide de plyr::ddply:
La
dplyr
serait:Vous pouvez spécifier les colonnes à résumer ou à exclure de la
summarise_each
par l'utilisation des fonctions spécifiques mentionnées dans le fichier d'aide de?dplyr::select
.Une autre façon de faire cela avec dplyr qui serait générique (n'avez pas besoin de la liste de colonnes) serait:
La simple et correcte avec
data.table
où vous pouvez sélectionner et désélectionner toutes les colonnes que vous souhaitez pour le regroupement et suming est:DT[, lapply(.SD,sum), by= eval(
colnames(
DT[,c(1,2,3:10),with=F][,-c(7,8),with=F]
)
)
, .SDcols=colnames(
DT[,c(100:200),with=F][,-c(10:20),with=F]
)
]