Meine bevorzugte Lösung verwendet rle
, die einen Wert zurückgeben wird (das Etikett, x
in Ihrem Beispiel) und eine Länge, die darstellt, wie viele Mal, dass der Wert der Reihe nach auftrat.
Durch die Kombination von rle
mit sort
haben Sie eine extrem schnelle Methode, um zu zählen, wie oft ein Wert angezeigt wurde. Dies kann bei komplexeren Problemen hilfreich sein.
Beispiel:
> 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 ...
Wenn der Wert, den Sie wollen nicht zu sehen, oder Sie müssen für später diesen Wert speichern, machen a
ein 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
finde ich es selten ist, dass ich die Frequenz von einem Wert und nicht alle Werte wissen wollen, und rle scheint der schnellste Weg, um zu bekommen zählen und speichern sie alle.
Vergessen Sie nicht potenzielle Gleitkomma-Probleme, insbesondere bei Tabellen, die Zahlen in Strings konvertieren. – hadley
Das ist ein großartiger Punkt. Das sind alles ganze Zahlen, also ist es in diesem Beispiel kein echtes Problem, oder? – Shane
nicht genau. Die Elemente der Tabelle sind Klassen der Integer-Klasse (Tabelle (Zahlen) [1]), aber 435 ist eine Gleitkommazahl. Um es zu einer Ganzzahl zu machen, können Sie 435L verwenden. –