Можно ли включить условный подсчет с другими безусловными агрегатами?Я понимаю, что вы можете сделать это с большинством агрегатных функций, использующих 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