Vielleicht dieses:
aggregate(rank~ID, df[as.character(df$class)<"e",], length)
# ID rank
#1 AA 2
#2 AB 2
#3 BB 1
Als für das, was @ Richard Scriven in den Kommentaren darauf hingewiesen (danke dafür):
Vergleich von Strings in Zeichenvektoren ist lexicographic innerhalb der Strings die Sortierfolge des Lokals im Einsatz
Wenn wir Sys.getlocale()
laufen, würden wir bekommen:
[1] "LC_COLLATE=English_United States.1252;LC_CTYPE=English_United
States.1252;LC_MONETARY=English_United
States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252"
Wir können das Gebietsschema festgelegt mit:
Sys.getlocale("LC_TIME") #LC_TIME for example
Siehe ?locales
für weitere Informationen.
können Sie erklären, wie es funktioniert? – user3581800
Sicher! dplyr hat den Pipe-Operator '%>%'. Es kann als "und dann" interpretiert werden. Also lesen Sie den Code wie folgt. Nehmen Sie Ihr df und gruppieren Sie dann nach einer id-Variablen und filtern Sie dann die Zeilen des df, die nicht zur Klasse "e" gehören, und fassen Sie sie dann nach der Anzahl in jeder Gruppe zusammen. – shayaa