Есть ли способ выполнить операцию задержки в R с использованием sqldf - PullRequest
0 голосов
/ 04 ноября 2019

Есть ли способ выполнить следующую операцию в SQL. Я имею в виду использование пакета sqldf в R

asdff <- data.frame(a=c(1,3,3,45))
asdff$b <- c(NA,asdff$a[-nrow(asdff)])
   a  b
1  1 NA
2  3  1
3  3  3
4 45  3

1 Ответ

0 голосов
/ 05 ноября 2019

Любой из них будет отставать от столбца a:

sqldf("select a, lag(a) over () as b from asdff")

sqldf("select a, lag(a) over (order by rowid) as b from asdff")

sqldf("select x.a, y.a as b 
  from asdff x 
  left join asdff y on x.rowid = y.rowid + 1")

Если у данных есть столбец, соответствующий временам, то его можно использовать и разрешить отставание по времени, даже если данныерамка уже не заказана к тому времени. Со встроенным фреймом данных BOD (который имеет столбцы Time и demand)

sqldf("select *, lag(demand) over (order by Time) as prev from BOD")

Для получения дополнительной информации см .: https://www.sqlite.org/windowfunctions.html

...