Итак, я вижу, что вы используете пакет zoo
и функцию yearqtr
. Я не могу прочитать колонку yq
, используя ваш fread
, но я просто быстро воспроизвел данные следующим образом:
library(zoo)
dt<-data.table(cbind(yq=2013 + seq(0,5)/4,
A = c(35233684, 36235895, 36767497, 37273346, 37788578, 38674955),
B = c(270950851, 274194641, 275614372, 277125049, 278202677, 281025545)))
Затем просто преобразовал yq следующим образом:
dt[,yq:=as.yearqtr(yq)]
Теперь, если вы хотите сохранить этот столбец, вам нужно обновить столбцы, указав их:
cols<-c("A","B")
dt[,eval(cols):=lapply(.SD,function(x)x/shift(x) - 1), .SDcols = 2:3, by = .(quarter(yq))]
Просто добавьте столько столбцов, сколько вам нужно, к вектору cols
и используйте eval
, чтобы data.table
не создавал новый столбец с именем "cols"! Это отвечает на ваш вопрос?