Trouver les éléments les plus communs dans un vecteur dans R [duplicate]
Cette question a déjà une réponse ici:
- moyen le plus rapide de compter les occurrences de chaque élément unique 2 réponses
- Comptant le nombre d'éléments avec les valeurs de x dans un vecteur 12 réponses
J'ai un vecteur dire
c(1,1,1,1,1,1,2,3,4,5,7,7,5,7,7,7)
Comment puis-je trouver les comptes de chaque élément et retourner les 3 éléments les plus fréquents, c'est-à-dire 1, 7, 5?
Je pense que cela devrait être très simple, mais j'ai des problèmes avec cela.
4 réponses
Je suis sûr que c'est un doublon, mais la réponse est simple:
sort(table(variable),decreasing=TRUE)[1:3]
Je ne sais pas si c'est mieux que l'approche de la table, mais si votre liste est déjà un facteur, sa méthode de résumé vous donnera des comptes de fréquence:
> summary(as.factor(c(1,1,1,1,1,1,2,3,4,5,7,7,5,7,7,7)))
1 2 3 4 5 7
6 1 1 1 2 5
Et puis vous pouvez obtenir le top 3 le plus fréquent comme ceci:
> names(sort(summary(as.factor(c(1,1,1,1,1,1,2,3,4,5,7,7,5,7,7,7))), decreasing=T)[1:3])
[1] "1" "7" "5"
Si votre vecteur ne contient que des entiers, tabulate
sera beaucoup plus rapide que toute autre chose. Il y a quelques prises à prendre en compte:
- il retournera par défaut le nombre pour les nombres de 1 à N.
- il retournera un vecteur sans nom.
Cela signifie que si votre x = c(1,1,1,3)
alors {[4] } retournera (3, 0, 1)
. Notez que les comptes sont pour 1 to max(x)
par défaut.
Comment Pouvez-vous utiliser tabulate
pour vous assurer que vous pouvez passer tout les chiffres?
set.seed(45)
x <- sample(-5:5, 25, TRUE)
# [1] 1 -2 -3 -1 -2 -2 -3 1 -3 -5 -1 4 -2 0 -1 -1 5 -4 -1 -3 -4 -2 1 2 4
Ajoutez simplement abs(min(x))+1
quand min(x) <= 0
pour vous assurer que les valeurs commencent à partir de 1. Si min(x) > 0
, utilisez simplement tabulate
directement.
sort(setNames(tabulate(x + ifelse(min(x) <= 0, abs(min(x))+1, 0)),
seq(min(x), max(x))), decreasing=TRUE)[1:3]
Si votre vecteur contient NA
, alors vous pouvez utiliser table
avec useNA="always"
paramètre.
Vous pouvez utiliser la fonction table() pour obtenir une tabulation de la fréquence des valeurs dans un tableau / vecteur, puis trier cette table.
x = c(1, 1, 1, 2, 2)
sort(table(x))
2 1
2 3