Здесь .
похоже на вызов list
в data.table
. Он создает итоговый выходной столбец
.(Previous_Sales=sum(Sales))
Или с list
list(Previous_Sales=sum(Sales))
В dplyr
аналогичный синтаксис будет
summarise(Previous_Sales = sum(Sales))
и для создание столбца / изменение существующего столбца. usee
mutate(Previous_Sales = sum(Sales))
С помощью data.table
обновление / создание столбца выполняется с помощью :=
Previous_Sales := sum(Sales)
Аналогично, by
также будет list
имен столбцов
by = list(Category, send_Date=floor_date(send_Date,unit='week',week_start = 7)
, которые мы также можем использовать
by = .(Category, send_Date=floor_date(send_Date,unit='week',week_start = 7)
В контексте data.table
синтаксис является последовательным в следующем порядке
dt[i, j, by]
где i
- это место, где мы задаем условие строки для поднабора строк, j
, мы применяем функции к столбцу / столбцу и by
к группирующим столбцам. Используя простой пример с iris
as.data.table(iris)[Sepal.Length < 5, .(Sum = sum(Sepal.Width)), by = Species]
, i
равен Sepal.Length < 5
, он выбирает только те строки, удовлетворяющие этому условию, для sum
Sepal.Width (в этих строках), и так как предоставляется опция by
, она будет делать sum
из Sepal.Width для каждого «вида», в результате чего будет 3 строки (здесь есть 3 уникальных «вида»). Мы также можем сделать это без опции i
, выполнив поднабор в самом j
as.data.table(iris)[, .(Sum = sum(Sepal.Width[Sepal.Length < 5])), by = Species]
С summarise
, оба эти параметра в порядке, но если мы выполним задание (:=
), он будет другим
as.data.table(iris)[Sepal.Length < 5, Sum := sum(Sepal.Width), by = Species]
Это создаст столбец «Сумма» и заполнит значения sum
только там, где «Sepal.Length <5 <code>and all other row elements will be NA». Если мы сделаем второй параметр
as.data.table(iris)[, Sum := sum(Sepal.Width[Sepal.Length < 5]), by = Species]
, то элемента NA не будет, потому что он поднабора в пределах j
создает одно значение sum
для каждого «вида»