Puste współczynniki w danych „by”

Mam tabelę danych, która ma kolumnę czynnikową z pustymi poziomami. Muszę uzyskać liczbę wierszy i sumy innych zmiennych, wszystkie pogrupowane według wielu czynników, w tym jeden z pustymi poziomami. Moje pytanie jest podobne do tegojeden, ale tutaj muszę liczyć się z wieloma czynnikami.

Na przykład niech data.table będzie:

library('data.table')

dtr <- data.table(v1=sample(1:15), 
v2=factor(sample(letters[1:3], 15, replace = TRUE),levels=letters[1:5]),
v3=sample(c("yes", "no"), 15, replace = TRUE))

Chcę wykonać następujące czynności:

dtr[,list(freq=.N,mm=sum(v1,na.rm=T)),by=list(v2,v3)]

#Output is:
   v2  v3 freq mm
1:  b yes    4 22
2:  b  no    1 13
3:  c  no    3 10
4:  a  no    4 49
5:  c yes    1 10
6:  a yes    2 16

Chcę, aby wyjście zawierało również puste poziomy dla v2 („d” i „e”), jak wtable(dtr$v2,dtr$v3), więc ostateczny wynik powinien wyglądać (kolejność nie ma znaczenia):

   v2  v3 freq mm
1:  b yes    4 22
2:  b  no    1 13
3:  c  no    3 10
4:  a  no    4 49
5:  c yes    1 10
6:  a yes    2 16
7:  d yes    0 0
8:  d no    0 0
9:  e yes    0 0
10:  e no    0 0

Próbowałem użyć metody użytej w łączu, ale nie jestem pewien, jak użyć funkcji J () w połączeniu, gdy używanych jest wiele kolumn.

Działa to dobrze w przypadku grupowania tylko przez 1 kolumnę:

setkey(dtr,v2)
dtr[J(levels(v2)),list(freq=.N,mm=sum(v1,na.rm=T))]

Jednak,dtr[J(levels(v2),v3),list(freq=.N,mm=sum(v1,na.rm=T))] nie zawiera wszystkich kombinacji

questionAnswers(2)

yourAnswerToTheQuestion