Ma solution préférée utilise rle
, qui permet de renvoyer une valeur (l'étiquette, x
dans l'exemple) et d'une longueur, qui représente le nombre de fois que la valeur est apparu dans la séquence.
En combinant rle
avec sort
, 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:
> numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435,453,435,324,34,456,56,567,65,34,435)
> a <- rle(sort(numbers))
> a
Run Length Encoding
lengths: int [1:15] 2 1 2 2 1 1 2 1 2 1 ...
values : num [1:15] 4 5 23 34 43 54 56 65 67 324 ...
Si la valeur que vous souhaitez ne pas apparaître, ou vous avez besoin de stocker cette valeur pour la suite, a
un data.frame
.
> b <- data.frame(number=a$values, n=a$lengths)
> b
values n
1 4 2
2 5 1
3 23 2
4 34 2
5 43 1
6 54 1
7 56 2
8 65 1
9 67 2
10 324 1
11 435 3
12 453 1
13 456 1
14 567 1
15 657 1
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 stocker.