Compter le nombre d'éléments avec les valeurs de x dans un vecteur
J'ai un vecteur de nombres:
numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435,
453,435,324,34,456,56,567,65,34,435)
Comment puis-je avoir R compter le nombre de fois qu'une valeur x apparaît dans le vecteur?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement utiliser
table()
:Ensuite, vous pouvez sous-ensemble c':
Ou de le convertir en données.image si vous êtes plus à l'aise avec le travail que:
a["435"]
insetead dea[names(a)==435]
?La façon la plus directe est
sum(numbers == x)
.numbers == x
crée une logique vecteur qui est VRAI à chaque emplacement que x se produit, et quandsum
ing, la logique vecteur est contrainte numérique qui convertit VRAI 1 et FALSE 0.Toutefois, notez que pour les nombres à virgule flottante, il est préférable d'utiliser quelque chose comme:
sum(abs(numbers - x) < 1e-6)
.x
dans les données, plutôt que sur une valeur connue dex
. Pour être juste, c'est ce que la question initiale était d'environ. Comme je l'ai dit dans ma réponse ci-dessous, "je trouve que c'est rare que j'ai envie de connaître la fréquence d'une valeur et non pas toutes les valeurs..."Je serais probablement faire quelque chose comme ceci
Mais vraiment, la meilleure voie est
table(numbers)
va faire beaucoup plus de travail que la solution la plus simple,sum(numbers==x)
, car il va déterminer le nombre de toutes les autres nombres de la liste.Il est également
count(numbers)
deplyr
paquet. Beaucoup plus pratique que detable
à mon avis.Ma solution préférée utilise
rle
, qui permet de renvoyer une valeur (l'étiquette,x
dans votre exemple) et une longueur, qui représente le nombre de fois que la valeur est apparu dans la séquence.En combinant
rle
avecsort
, vous avez une extrêmement rapide de la façon de compter le nombre de fois où toute valeur est apparu. Cela peut être utile avec des problèmes plus complexes.Exemple:
Si la valeur que vous souhaitez ne pas apparaître, ou vous avez besoin de stocker cette valeur pour plus tard, faire
a
undata.frame
.Je trouve que c'est rare que j'ai envie de connaître la fréquence d'une valeur et non pas toutes les valeurs, et rle semble être la façon la plus rapide de compter et de les conserver tous.
c(rep('A', 3), rep('G', 4), 'A', rep('G', 2), rep('C', 10))
serait de retourvalues = c('A','G','A','G','C')
etlengths=c(3, 4, 1, 2, 10)
ce qui est parfois utile.table
est plus rapidewhen the vector is long
(j'ai essayé 100000) mais un peu plus quand il court (j'ai essayé 1000)Il n'y est une fonction standard dans la R pour que
tabulate(numbers)
tabulate
est que vous ne pouvez pas traiter avec le zéro et les nombres négatifs.tabulate
. Remarque:sort
semble être nécessaire pour son utilisation correcte en général:tabulate(sort(numbers))
.voici un rapide et sale:
Si vous voulez compter le nombre d'apparitions par la suite, vous pouvez faire usage de la
sapply
fonction:De sortie:
Vous pouvez modifier le nombre de ce que vous voulez dans la ligne suivante
L'aide de la table, mais sans comparaison avec
names
:table
est utile lorsque vous utilisez le compte de différents éléments à plusieurs reprises. Si vous avez besoin de seulement un compte, utilisezsum(numbers == x)
D'une façon de plus je trouve pratique est:
Cela transforme le jeu de données pour le facteur, et puis le résumé() nous donne les totaux de contrôle (nombre de valeurs uniques).
De sortie est:
Cela peut être stocké comme dataframe si l'on préfère.
ici ligne.noms a été utilisé pour renommer les noms de lignes.
sans l'aide de la ligne.les noms, les noms de colonne dans s sont utilisés comme noms de ligne dans de nouveaux dataframe
De sortie est:
Il existe différentes façons de mesurer un des éléments spécifiques
Cela peut être fait avec
outer
pour obtenir un metrix des égalités suivie parrowSums
, avec un sens évident.Afin d'avoir le compte et
numbers
dans le même ensemble de données, un ensemble de données.le cadre est créé la première fois. Cette étape n'est pas nécessaire si vous voulez séparer d'entrée et de sortie.