У меня есть dplyr
версия group_by, в которой я пытаюсь разделить столбец с именем ratio на разные диапазоны. Он работает нормально. Я не могу обновить dplyr
до новой версии из-за управляемой студии R (управляется обычным администратором). Есть ли способ переписать ту же логику в data.table
способ
output <- output %>%
group_by(start = as.IDate(timestamp),VAV = van_d, conditions = cut(output$ratio, breaks=c(0,0.7,0.8,0.9,1,100),labels=c("0-0.7","0.7-0.8","0.8-0.9","0.9-1",">1"))) %>%
summarise(duration = n()) %>%
ungroup %>%
na.omit
С data.table
обычно используется
dt[i, j, by]
где i
— индекс для подмножества строк, т. е. может принимать числовое или логическое выражение, j
— для столбцов, а by
— для группировки. Это использование применимо только к data.table
объектам. Итак, если входной набор данных data.frame
или tibble
, преобразуйте в data.table
либо с помощью as.data.table
(не изменит исходный объект), либо с помощью setDT
(что преобразует в data.table
по ссылке).
Теперь мы указываем i
, j
и by
. В коде dplyr
нет filter
ing, т.е. нам не нужно указывать i
- поэтому он остается пустым. Код group_by
войдет в by
. Это может быть list
или синтаксис .(
, тогда j
вместо summarise
также является list
(.(duration = .N)
). .N
похож на n()
из dplyr
library(data.table)
setDT(output)[, .(duration = .N),
by = .(start = as.IDate(timestamp),VAV = van_d,
conditions = cut(ratio, breaks=c(0,0.7,0.8,0.9,1,100),
labels=c("0-0.7","0.7-0.8","0.8-0.9","0.9-1",">1"))]