split apply recombine, plyr, data.table em R

Eu estou fazendo o clássico dividir-aplicar-recombinar coisa em R. Meu conjunto de dados é um monte de empresas ao longo do tempo. A aplicação que estou fazendo está executando uma regressão para cada firma e retornando os residuais, portanto, não estou agregando por firma.plyr é ótimo para isso, mas leva muito tempo para ser executado quando o número de empresas é grande. Existe uma maneira de fazer isso comdata.table?

Dados de amostra:

dte, id, val1, val2
2001-10-02, 1, 10, 25
2001-10-03, 1, 11, 24
2001-10-04, 1, 12, 23
2001-10-02, 2, 13, 22
2001-10-03, 2, 14, 21

Eu preciso dividir por cada id (ou seja, 1 e 2). Execute uma regressão, retorne os residuais e anexe-a como uma coluna aos meus dados. Existe uma maneira de fazer isso usandodata.table?