Comment ajouter le nombre de valeurs uniques par groupe de R des données.cadre
Je souhaite compter le nombre de valeurs uniques par groupe d'une deuxième variable, puis ajouter le comte de données existantes.cadre dans une nouvelle colonne. Par exemple, si les données existantes cadre ressemble à ceci:
color type
1 black chair
2 black chair
3 black sofa
4 green sofa
5 green sofa
6 red sofa
7 red plate
8 blue sofa
9 blue plate
10 blue chair
Je veux ajouter pour chaque color
, le comte de unique types
qui sont présents dans les données:
color type unique_types
1 black chair 2
2 black chair 2
3 black sofa 2
4 green sofa 1
5 green sofa 1
6 red sofa 2
7 red plate 2
8 blue sofa 3
9 blue plate 3
10 blue chair 3
J'espérais utiliser ave
, mais n'arrive pas à trouver une méthode simple qui ne nécessite pas beaucoup de lignes. J'ai >100 000 lignes, alors je ne suis également pas sûr de la façon importante l'efficacité est.
C'est un peu similaire à ce problème: Compter le nombre d'observations/nombre de lignes par groupe et ajouter le résultat à la trame de données
Vous devez vous connecter pour publier un commentaire.
À l'aide de
ave
(puisque vous le demandez expressément):Assurez-vous que
type
, c'est le caractère de vecteur et non pas facteur.Puisque vous dites aussi que vos données est énorme et que la vitesse/performance peut donc être un facteur, je vous suggère un
data.table
solution.uniqueN
a été mis en œuvre dansv1.9.6
et est plus rapide d'un équivalent delength(unique(.))
. En outre, il fonctionne avec des données.images/données.des tables.D'autres solutions:
À l'aide de plyr:
À l'aide de
aggregate
:Voici une solution avec le dplyr package - il a
n_distinct()
comme un wrapper pourlength(unique())
.Cela peut aussi être réalisée dans un vectorisé sans par les opérations du groupe en combinant
unique
avectable
outabulate
Si
df$color
estfactor
, puisSoit
Ou
Si
df$color
estcharacter
puis justeSi
df$color
est uninteger
puis juste