有没有一种方法可以在SQL中执行以下操作。我的意思是在R中使用sqldf包
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
答案 0 :(得分:0)
其中任何一个都会落后于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