Lo hago con frecuencia
DT[CJ(colA = colA, colB = colB, unique=TRUE), on=c("colA","colB")]
# to complete missing levels
# or
DT[, CJ(colA = colA, colB = colB, unique=TRUE)][!DT, on=c("colA","colB")]
# to identify missing levels
# http://stackoverflow.com/a/36065607/1191259
Sería bueno si pudiera salirme con la mía escribiendo colA
y colB
menos veces. El FR aquí es para
CJ(colA, colB, unique=TRUE, names=TRUE)
para inferir los nombres colA
y colB
, quizás usando cualquier método usado por data.frame () y data.table () ( make.names
?).
(La repetición del nombre podría reducirse aún más si on=.Icols
fuera una cosa, supongo, pero lo dejaré para un FR separado).
SO publicaciones para actualizar ...
CJ
toma ...
como primer argumento, y esa función será un método genérico, así que AFAIK tendremos que cambiarlo a CJ(x, ...)
, esos cambios se pueden hacer juntos # 1090
+1 y no veo la necesidad del argumento names
; este debería ser el único comportamiento. Con el cambio de sintaxis de unión para usar "on" en lugar de setkey
esto se ha convertido en un gran problema para mí.
También me gustaría ver que unique = TRUE
sea el valor predeterminado; no puedo pensar en _ever_ que no necesite unir los argumentos a CJ
.
@jangorecki Todavía no toqué las cosas # 1090 / # 814. mejor como autónomo, creo, a menos que me esté perdiendo algo
Comentario más útil
+1 y no veo la necesidad del argumento
names
; este debería ser el único comportamiento. Con el cambio de sintaxis de unión para usar "on" en lugar desetkey
esto se ha convertido en un gran problema para mí.También me gustaría ver que
unique = TRUE
sea el valor predeterminado; no puedo pensar en _ever_ que no necesite unir los argumentos aCJ
.