¿Cómo numerar / etiquetar la tabla de datos por número de grupo de group_by?
Tengo un tbl_df donde quierogroup_by(u, v)
para cada combinación entera distinta observada con(u, v)
.
EDITAR: esto se resolvió agregandogroup_indices()
de nuevo endplyr 0.4.0
a) Entonces quiero asignar a cada grupo distinto una etiqueta de número distinto arbitrario = 1,2,3 ... por ejemplo la combinación (u, v) == (2,3) podría obtener la etiqueta 1, (1,3) podría obtener 2, y así sucesivamente. Cómo hacer esto con unomutate()
, sin un resumen de tres pasos y auto-unirse?
dplyr tiene una función ordenadan()
, pero eso da el número de elementosdentro su grupo, no el generalnumero del grupo. Endata.table
esto simplemente se llamaría.GRP
.
b) En realidad, lo que realmente quiero asignar es una etiqueta de cadena / carácter ('A', 'B', ...). Pero numerar grupos por enteros es lo suficientemente bueno, porque entonces puedo usarinteger_to_label(i)
como a continuación. ¿A menos que haya una manera inteligente de fusionar estos dos? Pero no te preocupes por esta parte.
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