490 Stimmen

Zählen der Anzahl der Elemente mit den Werten von x in einem Vektor

Ich habe einen Vektor von Zahlen:

numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435,
         453,435,324,34,456,56,567,65,34,435)

Wie kann ich R die Anzahl der Male zählen lassen, die ein Wert x in dem Vektor erscheint?

623voto

Shane Punkte 95376

Sie können einfach Folgendes verwenden table() :

> a <- table(numbers)
> a
numbers
  4   5  23  34  43  54  56  65  67 324 435 453 456 567 657 
  2   1   2   2   1   1   2   1   2   1   3   1   1   1   1 

Dann können Sie es unterteilen:

> a[names(a)==435]
435 
  3

Oder konvertieren Sie sie in ein data.frame, wenn Sie damit besser arbeiten können:

> as.data.frame(table(numbers))
   numbers Freq
1        4    2
2        5    1
3       23    2
4       34    2
...

318voto

hadley Punkte 97925

Der direkteste Weg ist sum(numbers == x) .

numbers == x erzeugt einen logischen Vektor, der an jeder Stelle, an der x auftritt, TRUE ist, und wenn sum ing wird der logische Vektor in einen numerischen Vektor umgewandelt, der TRUE in 1 und FALSE in 0 umwandelt.

Beachten Sie jedoch, dass es für Fließkommazahlen besser ist, etwas wie zu verwenden: sum(abs(numbers - x) < 1e-6) .

84voto

Jesse Punkte 799

Ich würde wahrscheinlich etwa so vorgehen

length(which(numbers==x))

Aber in Wirklichkeit ist eine bessere Lösung

table(numbers)

41voto

geotheory Punkte 21109

Außerdem gibt es count(numbers) de plyr Paket. Viel bequemer als table meiner Meinung nach.

38voto

JBecker Punkte 804

Meine bevorzugte Lösung verwendet rle die einen Wert zurückgibt (die Bezeichnung, x in Ihrem Beispiel) und eine Länge, die angibt, wie oft dieser Wert in der Folge vorkommt.

Durch die Kombination rle avec sort haben Sie eine extrem schnelle Möglichkeit, die Häufigkeit des Auftretens eines Wertes zu zählen. Dies kann bei komplexeren Problemen hilfreich sein.

Ejemplo:

> 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 gewünschte Wert nicht angezeigt wird oder Sie den Wert für später speichern müssen, machen Sie a 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

Ich finde es selten, dass ich die Häufigkeit eines Wertes wissen will und nicht alle Werte, und rle scheint der schnellste Weg zu sein, sie alle zu zählen und zu speichern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X