У меня есть кадр данных, например:
> prova
sent weeknumber processed
1 100 1 1
2 23 1 0
3 254 1 1
4 321 2 0
5 1241 2 0
6 323 2 1
7 1221 3 1
structure(list(sent = c(100, 23, 254, 321, 1241, 323, 1221),
weeknumber = c(1, 1, 1, 2, 2, 2, 3), processed = c(1, 0,
1, 0, 0, 1, 1)), .Names = c("sent", "weeknumber", "processed"
), row.names = c(NA, -7L), class = "data.frame")
Если я хочу извлечь количество отправленных по номеру недели для строк с обработанным = 0, я могу сделать:
aggregate(prova[prova$processed==0,]$sent, by=list(prova[prova$processed==0,]$weeknumber), FUN = sum)
Group.1 x
1 1 23
2 2 1562
И если я хочу извлечь сумму отправленных по номеру недели при обработке = 1, я делаю:
aggregate(prova[prova$processed==1,]$sent, by=list(prova[prova$processed==1,]$weeknumber), FUN = sum)
Group.1 x
1 1 354
2 2 323
3 3 1221
Однако я хотел бы найти способ всегда иметь одинаковую длину результата, то есть в случае обработки = 0, что-то вроде этого:
Group.1 x
1 1 23
2 2 1562
3 3 0 // this is the new row I'd like to add
Если я просто передам весь список возможных номеров недель, я получу:
aggregate(prova[prova$processed==0,]$sent, by=list(prova$weeknumber), FUN = sum)
Error in aggregate.data.frame(as.data.frame(x), ...) :
arguments must have same length
Любая подсказка / совет очень ценится!