Disons que j'ai:
v = rep(c(1,2, 2, 2), 25)
Maintenant, je veux compter le nombre de fois où chaque valeur unique apparaît. unique(v)
renvoie ce que sont les valeurs uniques, mais pas leur nombre.
> unique(v)
[1] 1 2
Je veux quelque chose qui me donne
length(v[v==1])
[1] 25
length(v[v==2])
[1] 75
mais comme un one-liner plus général :) Quelque chose de proche (mais pas tout à fait) comme ça:
#<doesn't work right> length(v[v==unique(v)])
hist
.table
semble un peu plus lent quehist
. Je me demande pourquoi. Quelqu'un peut-il confirmer?order()
les résultats. iex <- as.data.frame(table(dummyData)); x[order(x$Freq, decreasing = TRUE), ]
Si vous avez plusieurs facteurs (= un bloc de données multidimensionnel), vous pouvez utiliser le
dplyr
package pour compter des valeurs uniques dans chaque combinaison de facteurs:Il utilise l'opérateur de canal
%>%
pour enchaîner les appels de méthode sur le bloc de donnéesdata
.la source
C'est une approche en une seule ligne en utilisant
aggregate
.la source
La fonction table () est une bonne solution, comme l'a suggéré Chase . Si vous analysez un ensemble de données volumineux, une autre méthode consiste à utiliser la fonction .N dans un package datatable.
Assurez-vous d'avoir installé le package de table de données en
Code:
la source
Pour obtenir un vecteur entier non dimensionné contenant le nombre de valeurs uniques, utilisez
c()
.Cela peut être utile si vous devez alimenter les décomptes de valeurs uniques dans une autre fonction, et est plus court et plus idiomatique que celui
t(as.data.frame(table(dummyData))[,2]
publié dans un commentaire à la réponse de Chase. Merci à Ricardo Saporta qui me l'a fait remarquer ici .la source
Cela fonctionne pour moi. Prenez votre vecteur
v
length(summary(as.factor(v),maxsum=50000))
Commentaire: définissez maxsum pour être suffisamment grand pour capturer le nombre de valeurs uniques
ou avec le
magrittr
packagev %>% as.factor %>% summary(maxsum=50000) %>% length
la source
Si vous avez besoin d'avoir le nombre de valeurs uniques en tant que colonne supplémentaire dans le bloc de données contenant vos valeurs (une colonne qui peut représenter la taille de l'échantillon par exemple), plyr fournit un moyen simple:
la source
ddply(data_frame, .(v), count)
. Cela vaut également la peinelibrary("plyr")
de préciser que vous avez besoin d'un appel pourddply
travailler.transform
au lieu demutate
lors de l'utilisationplyr
.Rendre les valeurs catégoriques et appelantes
summary()
fonctionnerait également.la source
Vous pouvez également essayer un
tidyverse
la source
Si vous souhaitez exécuter unique sur un data.frame (par exemple, train.data), et également obtenir les décomptes (qui peuvent être utilisés comme poids dans les classificateurs), vous pouvez faire ce qui suit:
la source
length (unique (df $ col)) est le moyen le plus simple que je puisse voir.
la source
la source