условное число строк в data.table, интегрированное с другими безусловными агрегатами в R - PullRequest
0 голосов
/ 21 февраля 2019

Можно ли включить условный подсчет с другими безусловными агрегатами?Я понимаю, что вы можете сделать это с большинством агрегатных функций, использующих which (), но не смогли найти решение для подсчета строк.

Например, следующий код суммирует col1, col4 в sum1 и суммыcol2, для которого col3> 3 на col4 в sum2.

> DT[, .(sum1 = sum(col1) 
       , sum2 = sum(col2[which(col3 > 3)]))
     , by = (col4)]

что-нибудь похожее для .N?например .N [which (col3> 3)]

Я понимаю, что вы можете сделать это отдельно, используя:

> DT[col3 > 3, .N, by = .(col4)]  # this works but not what I'm after

Это не то, что я ищу.Я хотел бы объединить условный счет с другими безусловными агрегатами, если бы я мог использовать только операции data.table.Я не хотел бы использовать другие пакеты.

вот пример данных:

> DT <- data.table(col1 = c(3,5,2,2,4), col2 = c(0,1,0,1,1), col3 = c(3,4,6,7,1), col4 = c('a', 'b', 'a', 'a' ,'b'))
> DT
   col1 col2 col3 col4
1:    3    0    3    a
2:    5    1    4    b
3:    2    0    6    a
4:    2    1    7    a
5:    4    1    1    b

Мой желаемый вывод:

DT[, .( sum1 = sum(col1)
        , sum2 = sum(col3[which(col3 > 3)])
        , count3 = ???????) #.N[which(col3 > 3), but this doesn't work
    , by = .(col4)]

   col4 sum1 sum2 count3
1:    a    7   13      2
2:    b    9    4      1
...