Мой предпочтительным решением использует rle
, который будет возвращать значение (метку, x
в вашем примере) и длиной, которая представляет сколько раз это значение появилось в последовательности.
Объединив rle
с sort
, у вас есть чрезвычайно быстрый способ подсчета количества раз, когда появилось какое-либо значение. Это может быть полезно при более сложных проблемах.
Пример:
> 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 ...
Если значение, которое вы хотите не отображается, или вам нужно сохранить это значение для последующего использования, сделать a
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
Я считаю, что это редко, что я хочу знать частоту одного значения и не все значения, и RLE, кажется, самый быстрый способ получить подсчитывать и хранить их все.
Не забывайте о потенциальных проблемах с плавающей запятой, особенно с таблицей, которая координирует числа строк. – hadley
Это отличный момент. Это все целые числа, поэтому в этом примере это не проблема. Не так ли? – Shane
не совсем. Элементы таблицы имеют класс целочисленного класса (таблица (числа) [1]), но 435 - число с плавающей запятой. Чтобы сделать его целым числом, вы можете использовать 435L. –