проводить операции над столбцами, используемыми в группировке?
То, что предложил Андрей сработало. Неожиданно для меня, так как:
До этого был у меня опыт:
Делаю функцию, которая на вход получает data.table, на выход одно число. Применяю к её к .SD, в группированном data.table. если функция использует группирующую переменную - все ломалось. Если нет- все адекватно. Я думал, что при группировке в .SD нет группирующей переменной.
.SD is a data.table containing the Subset of x's Data for each group, excluding any columns used in by (or keyby).
А почему тогда работает как надо dt[, .SD[a>=b, .N], by = .(a, b, c)] , ведь в .SD не должно быть ни a, ни b ...
в .SD их и нет, это таблица .SD фильтруется по а и b, взятым из полной таблицы. Или даже не из полной таблицы, а из списка группирующих переменных, где по определению на каждое сочетание этих переменных приходится 1 строка. И эта 1 строка в случае с .SD[] повторяется нужное число раз, чтобы заполнить всю таблицу, а в варианте без .SD идут вычисления с этой самой одной строкой. Думаю, какая-то такая магия тут происходит
Вроде теперь понятно, но все равно какое-то колдунство. Групирующих переменных в .SD нет, но для фильтрации их можно взять из by и размножить по количеству строк. Но для function (.SD) так нельзя.
Обсуждают сегодня