У меня есть таблица данных, в которой есть факторный столбец с пустыми уровнями. Мне нужно получить количество строк и суммы других переменных, сгруппированных по нескольким факторам, включая фактор с пустыми уровнями. Мой вопрос похож на этот один, но здесь мне нужно учитывать несколько факторов.
Например, пусть 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))]
не включает все комбинации
setkey(dtr,v3,v2)
иunique(dtr[J(v3,levels(v2)),list(freq=.N,mm=sum(v1,na.rm=T))])
, это будет работать, но может ли кто-нибудь объяснить, почему и будет ли это работать для таблицы больших данных с более чем двумя группами? - person Asayat   schedule 18.09.2013