Der Arbeitsdatensatz wie folgt aussieht:Erstellen von Gruppen mit data.table
library('data.table')
df <- data.table(Name = c("a","a","b","b","c","c","d","d","e","e","f","f"),
Y = sample(1:30,12),
X = sample(1:30,12))
df
Name Y X
1: a 14 23
2: a 19 18
3: b 10 16
4: b 23 11
5: c 2 12
6: c 12 24
7: d 8 14
8: d 26 2
9: e 16 26
10: e 6 4
11: f 29 28
12: f 28 30
Was ich will, schließlich ist Graph von Gruppen zu machen (basierend auf Name
) zum Vergleich:
library(ggplot2)
ggplot(df, aes(X, Y)) + geom_point() + facet_grid(. ~ Name)
Da die tatsächlichen Datensatz enthält viel mehr Beobachtungen und grp
. Der ggplot, den ich erstelle, benötigt zu viel Zeit für die Verarbeitung und der letzte Graph ist nicht lesbar (grp
> 300). Ich plane, die Daten mit einer begrenzten Anzahl von Beobachtungen neu zu gruppieren und sie getrennt zu graphisieren (z. B. jedes Mal 10 Gruppen).
Also das letzte Daten-Set sollte wie folgt aussieht:
Name Y X grp level
1: a 14 23 1 1
2: a 19 18 1 1
3: b 10 16 2 1
4: b 23 11 2 1
5: c 2 12 3 1
6: c 12 24 3 1
7: d 8 14 4 2
8: d 26 2 4 2
9: e 16 26 5 2
10: e 6 4 5 2
11: f 29 28 6 2
12: f 28 30 6 2
und dann kann ich die grafische Darstellung ausführen basierend auf der neuen Gruppe level
:
ggplot(df, aes(X, Y)) + geom_point() + facet_grid(. ~ level)
In der obigen Abbildung, habe ich die grp
einfach von:
df[, grp := .GRP, by = Name]
Die Frage ist jetzt wie Erstellen Sie die level
Gruppe automatisch basierend auf grp
(ich muss grp
anstelle von Name
direkt als Basis erstellen, da im ursprünglichen Datensatz gibt es keine Muster in Name
)?
habe ich versucht, so etwas wie:
setkey(df, grp)
i <- 1
j <- 1
while(i < 4) {
df[levels(factor(grp)) == (i:i+2), level := j]
i <- i + 2
j <- j + 1
}
Es ist nicht gut funktioniert, wie ich brauche. Kann mir jemand einen Rat geben, wie ich dieses Problem angehen kann? Ich bin wirklich fest hier. Ich denke, es könnte eine einfache Möglichkeit sein, dies zu tun, vielleicht muss ich nicht einmal die level
Gruppe erstellen und kann die separate Grafik direkt mit anderen Mitteln erstellen?
'level' ist nur' grp' 'cut' in Stücke von 3, richtig? – rawr
@rawr ja, ich gebe nur ein Beispiel dort. In der Abbildung hat 'grp' 6 Ebenen, ich möchte sie nur auf 2 Ebenen reduzieren, jede 'Ebene' enthält 1 ~ 3 Ebenen in' grp'. – Chuan
also 'df [, level: = as.numeric (cut (grp, breaks = 2))]'? – rawr