У меня есть data.table, который имеет столбец факторов с пустыми уровнями. Мне нужно получить счетчик строк и суммы других переменных, все сгруппированные по нескольким факторам, в том числе с пустыми уровнями. Мой вопрос похож на этот один, но здесь мне нужно учитывать несколько факторов.
Например, пусть data.table будет:
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))
Я хочу сделать следующее:
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
Я хочу, чтобы вывод включал пустые уровни для v2 ( "d" и "e" ), как в table(dtr$v2,dtr$v3)
, поэтому окончательный вывод должен выглядеть (порядок не имеет значения):
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
Я попытался использовать метод, используемый в ссылке, но я не уверен, как использовать совместную функцию J() при использовании нескольких столбцов.
Это отлично подходит для группировки только на 1 столбец:
setkey(dtr,v2)
dtr[J(levels(v2)),list(freq=.N,mm=sum(v1,na.rm=T))]
Однако dtr[J(levels(v2),v3),list(freq=.N,mm=sum(v1,na.rm=T))]
не включает все комбинации