Группировка в data.table :как получить более 1 столбца результатов?

У меня есть объект data.table, подобный этому

library(data.table)

a <- structure(list(PERMNO = c(10006L, 10006L, 10015L, 10015L, 20000L, 20000L), 
                    SHROUT = c(1427L, 1427L, 1000L, 1001L, 200L, 200L), 
                    PRC = c(6.5, 6.125, 0.75, 0.5, 3, 4), 
                    RET = c(0.005, -0.005, -0.001, 0.05, -0.002, 0.0031)),
                  .Names = c("PERMNO", "SHROUT", "PRC", "RET"), 
               class = c("data.table", "data.frame"), row.names = c(NA, -6L))

setkey(a,PERMNO)

. и мне нужно выполнить ряд вычислений по PERMNO, но здесь в этом примере допустим их всего 2:

mktcap <- a[, tail(SHROUT,n=1)*tail(PRC,n=1),by=PERMNO]
sqret <- a[, sum(RET^2),by=PERMNO]

которые производят

> mktcap
     PERMNO       V1
[1,]  10006 8740.375
[2,]  10015  500.500
[3,]  20000  800.000

> sqret
     PERMNO        V1
[1,]  10006 5.000e-05
[2,]  10015 2.501e-03
[3,]  20000 1.361e-05

Я хотел бы объединить две функции в одну, чтобы создать матрицу (или data.table, data.frame, что угодно )с 3 столбцами, первый с PERMNOs, второй с mktcapи третий с sqrt.

Проблема в том, что эта группирующая функция (, т.е.variable[, function(), by= ])кажется, выдает результаты только с двумя столбцами, один с ключами и один с результатами.

Это моя попытка (одна из многих )произвести то, что я хочу:

comb.fun <- function(datai) {
     mktcap <- as.matrix(tail(datai[,1],n=1)*tail(datai[,2],n=1),ncol=1)
     sqret <- as.matrix(sum(datai[,3]^2),ncol=1)
     return(c(mktcap,sqret))
}   

myresults <- a[, comb.fun(cbind(SHROUT,PRC,RET)), by=PERMNO]

который производит

     PERMNO           V1
[1,]  10006 8.740375e+03
[2,]  10006 5.000000e-05
[3,]  10015 5.005000e+02
[4,]  10015 2.501000e-03
[5,]  20000 8.000000e+02
[6,]  20000 1.361000e-05

(все результаты есть, но они были помещены в один столбец ). Что бы я ни пытался, я не могу заставить группировку возвращать матрицу с более чем двумя столбцами (или более чем с одним столбцом результатов ).

Можно ли получить два или более столбца результатов с группировкой в ​​data.table?

6
задан Vivi 27 June 2012 в 18:57
поделиться