Ich sehe viele Fragen und Antworten zu order
und sort
. Gibt es etwas, das Vektoren oder Datenrahmen in Gruppierungen sortiert (wie Quartile oder Dezile)? Ich habe eine "manuelle" Lösung, aber es gibt wahrscheinlich eine bessere Lösung, die in Gruppen getestet wurde.
Hier ist mein Versuch:
temp <- data.frame(name=letters[1:12], value=rnorm(12), quartile=rep(NA, 12))
temp
# name value quartile
# 1 a 2.55118169 NA
# 2 b 0.79755259 NA
# 3 c 0.16918905 NA
# 4 d 1.73359245 NA
# 5 e 0.41027113 NA
# 6 f 0.73012966 NA
# 7 g -1.35901658 NA
# 8 h -0.80591167 NA
# 9 i 0.48966739 NA
# 10 j 0.88856758 NA
# 11 k 0.05146856 NA
# 12 l -0.12310229 NA
temp.sorted <- temp[order(temp$value), ]
temp.sorted$quartile <- rep(1:4, each=12/4)
temp <- temp.sorted[order(as.numeric(rownames(temp.sorted))), ]
temp
# name value quartile
# 1 a 2.55118169 4
# 2 b 0.79755259 3
# 3 c 0.16918905 2
# 4 d 1.73359245 4
# 5 e 0.41027113 2
# 6 f 0.73012966 3
# 7 g -1.35901658 1
# 8 h -0.80591167 1
# 9 i 0.48966739 3
# 10 j 0.88856758 4
# 11 k 0.05146856 2
# 12 l -0.12310229 1
Gibt es einen besseren (saubereren / schnelleren / einzeiligen) Ansatz? Vielen Dank!
cut()
hat ein Argument,labels
das verwendet werden kann, damit Sie diefactor()
Zeile nicht benötigen - fügen Sie einfachlabels = 1:4
dencut()
Aufruf Ihrer ersten Zeile hinzu.