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?
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?
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
...
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)
.
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 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.