Une base de R solution est de combiner la sortie de l' aggregate()
avec un merge()
étape. Je trouve la formule de l'interface d' aggregate()
un peu plus utile que l'interface standard, en partie parce que les noms sur la sortie sont plus agréable, donc je vais utiliser:
L' aggregate()
étape est
maxs <- aggregate(Score ~ Group, data = dat, FUN = max)
et l' merge()
étape est tout simplement
merge(maxs, dat)
Cela nous donne le résultat souhaité:
R> maxs <- aggregate(Score ~ Group, data = dat, FUN = max)
R> merge(maxs, dat)
Group Score Info
1 1 3 c
2 2 4 d
Vous pouvez, bien sûr, s'en tenir dans un one-liner (l'intermédiaire de l'étape était plus pour l'exposition):
merge(aggregate(Score ~ Group, data = dat, FUN = max), dat)
La principale raison, j'ai utilisé la formule de l'interface, c'est qu'il retourne d'un bloc de données avec le bon names
pour l'étape de fusion et publipostage; ce sont les noms des colonnes de l'ensemble de données original dat
. Nous avons besoin d'une sortie de l' aggregate()
d'avoir le bon nom pour qu' merge()
sait que les colonnes de l'origine des données agrégées et des cadres de match.
L'interface standard donne des noms impairs, selon la façon dont vous appelez ça:
R> aggregate(dat$Score, list(dat$Group), max)
Group.1 x
1 1 3
2 2 4
R> with(dat, aggregate(Score, list(Group), max))
Group.1 x
1 1 3
2 2 4
On peut utiliser merge()
sur ces sorties, mais nous devons faire plus disant R les colonnes qui correspondent.