У меня есть большой data.table
, который я сжимаю до уровня месяца, используя ,by
.
Есть 5 по vars, С# уровней: c(4,3,106,3,1380)
. 106 месяцев, 1380 - это географическая единица. Как оказалось, есть некоторые 0, в том, что некоторые ячейки не имеют значений. by
опускает их, но я бы хотел, чтобы они сохраняли их.
Воспроизводимый пример:
require(data.table)
set.seed(1)
n <- 1000
s <- function(n,l=5) sample(letters[seq(l)],n,replace=TRUE)
dat <- data.table( x=runif(n), g1=s(n), g2=s(n), g3=s(n,25) )
datCollapsed <- dat[ , list(nv=.N), by=list(g1,g2,g3) ]
datCollapsed[ , prod(dim(table(g1,g2,g3))) ] # how many there should be: 5*5*25=625
nrow(datCollapsed) # how many there are
Есть ли эффективный способ заполнить эти пропущенные значения с помощью 0, так что все перестановки из vars находятся в результирующем сложенном data.table?