У меня есть данные с 3 категориальными переменными: primarydx, NumDx и ContractType.
primarydx <- rep(c("AB","MT"),10)
NumDx <- rep(c(1,2,3), length.out=20 )
ContractType <- rep( c("W","L","W","W","W") , length.out=20)
SecDx3 <- data.table(primarydx, NumDx, ContractType)
Я хочу рассчитать процент записей каждого ContractType в пределах primarydx и NumDx. Работает следующий код:
Num <-SecDx3[ , .(n=.N), by=.(primarydx, NumDx, ContractType)]
denom <- SecDx3[ , .(d=.N), by=.(primarydx, NumDx)]
pct <- merge(Num,denom)
pct[,pct:=n/d][]
Есть ли лучший способ?
Я нашел что-то вроде:
SecDx3[,{
d =.N
.SD[, .(pct = .N/d), by=.(primarydx, NumDx, ContractType)]
}, by=.(primarydx, NumDx)]
, но это возвращает ошибку "Элементы в списке 'by' или 'keyby' имеют длину (1,1,20). Длина каждого элемента должна быть одинаковой с количеством строк в x или количеством строк, возвращаемых i (20) «. чего я не понимаю.
Спасибо за вашу помощь,
David