Wie nummeriere / beschrifte ich die Datentabelle mit der Gruppennummer von group_by?
Ich habe eine tbl_df, wo ich willgroup_by(u, v)
für jede bestimmte ganzzahlige Kombination, die mit(u, v)
.
BEARBEITEN: Dies wurde durch Hinzufügen behobengroup_indices()
zurück indplyr 0.4.0
a) Ich möchte dann jeder eindeutigen Gruppe eine willkürliche eindeutige Nummernbezeichnung = 1,2,3 zuweisen ... z.B. Die Kombination (u, v) == (2,3) könnte Label 1 bekommen, (1,3) könnte 2 bekommen und so weiter. Wie mache ich das mit einemmutate()
, ohne eine dreistufige Zusammenfassung und Selbstverknüpfung?
dplyr hat eine ordentliche Funktionn()
, aber das gibt die Anzahl der Elementeinnerhalb seine Gruppe, nicht die GesamtNummer der Gruppe. Imdata.table
Dies würde einfach aufgerufen werden.GRP
.
b) Eigentlich was ich wirklich einem String / Character Label zuordnen möchte ('A', 'B', ...). Aber die Nummerierung von Gruppen nach ganzen Zahlen ist gut genug, weil ich sie dann verwenden kanninteger_to_label(i)
wie nachstehend. Es sei denn, es gibt eine clevere Möglichkeit, diese beiden zusammenzuführen? Aber schwitzen Sie diesen Teil nicht.
set.seed(1234)
# Helper fn for mapping integer 1..26 to character label
integer_to_label <- function(i) { substr("ABCDEFGHIJKLMNOPQRSTUVWXYZ",i,i) }
df <- tbl_df(data.frame(u=sample.int(3,10,replace=T), v=sample.int(4,10,replace=T)))
# Want to label/number each distinct group of unique (u,v) combinations
df %>% group_by(u,v) %>% mutate(label = n()) # WRONG: n() is number of element within its group, not overall number of group
u v
1 2 3
2 1 3
3 1 2
4 2 3
5 1 2
6 3 3
7 1 3
8 1 2
9 3 1
10 3 4
KLUDGE 1: could do df %>% group_by(u,v) %>% summarize(label = n()) , then self-join