Comptage des valeurs uniques pour chaque colonne
Je voudrais retourner le nombre de valeurs uniques pour chaque colonne dans une table. Par exemple, si j'ai de la table:
Testdata <- data.frame(var_1 = c("a","a","a"), var_2 = c("b","b","b"), var_3 = c("c","d","e"))
var_1 | var_2 | var_3
a | b | c
a | b | d
a | b | e
Je voudrais la sortie:
Variable | Unique_Values
var_1 | 1
var_2 | 1
var_3 | 3
J'ai essayé de jouer avec les boucles à l'aide de la fonction unique, par exemple
for(i in names(Testdata)){
# Code using unique function
}
Cependant, je soupçonne qu'il ya un moyen plus simple.
OriginalL'auteur Zfunk | 2014-03-05
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
apply
:lapply
surapply
comme une approche qui s'adapte mieux. Par exemplelapply(Testdata, function(x) length(unique(x))
. Quelques grandes données de test:Testdata <- data.frame(replicate(15, sample(letters[1:sample(26, 1)], 1e6, replace = TRUE)))
Le commentaire ci-dessus doivent être acceptés réponse!
OriginalL'auteur sgibb
Dans
dplyr
:OriginalL'auteur leerssej
C'est en fait une amélioration sur le commentaire de @Ananda Mahto. Elle n'entrait pas dans le commentaire, donc j'ai décidé d'ajouter une réponse.
sapply
est en fait légèrement plus rapide quelapply
, et donne à la sortie dans une forme plus compacte, tout comme la sortie deapply
.Un essai de résultats sur des données réelles:
La
datafile
a environ 3,5 millions de lignes.Citant le texte d'aide:
OriginalL'auteur Tapajit Dey
À l'aide de la
lengths
-fonction:OriginalL'auteur zx8754
Voici une alternative:
Cela nécessite l'colonnes
character
.OriginalL'auteur Matthew Plourde
Ici, j'ai utilisé
dplyr
ettidyr
à compter (à l'aide de votreTestdata
bloc de données):OriginalL'auteur Megatron
Je viens d'essayer toutes les solution et les deux solutions ci-dessus ne fonctionnent pas l'un avec l'agrégation et la tidyr, mais deux d'entre eux à l'aide ne fonctionne pas. Je pense que l'utilisation d'une table de données est un bon choix ,
J'ai essayé de les comparer les uns des autres
OriginalL'auteur
OriginalL'auteur Vinay