使用dplyr窗口函数滞后(SQL数据库)

时间:2014-12-18 06:01:14

标签: sql r sqlite lag dplyr

在带有天气信息的SQLite数据库上(colums:DATE,DOY,TEMPERATURE)我喜欢添加一个带有温度总和的新列(每日温度从1月1日到当天)。 (DOY是一年中的。)

dplyr windows函数应该适合解决此问题http://cran.r-project.org/web/packages/dplyr/vignettes/window-functions.html。也许像是

mutate(TEMPERATURESUM = lag(TEMPERATURE, DOY, order_by=DATE))

但它会提供error in statement: no such function: LAG

你知道一个例子,我知道我是怎么做的吗?我不喜欢在dplyr中使用纯粹的SQL。

THX 克里斯托夫

1 个答案:

答案 0 :(得分:1)

如果您不反对使用原始SQL代码,可以使用library(rsqlite)

执行此操作
# SQL statements we want to run
sql1 <- "
ALTER TABLE t
ADD COLUMN tempsum real;"

sql2 <- "
UPDATE t
SET tempsum = (SELECT Sum(t2.temperature) 
               FROM t as t2 WHERE t2.doy <= t.doy);" 

dbSendQuery(conn, sql1)
dbSendQuery(conn, sql2)

这是根据此SO question改编的SQLite中的累积总和,以及example showing it works on SQL Fiddle(我了解here)。

但是我想你也可以只计算R中的累积总和并将结果写回SQLite,如果表格不是太大,那么我不确定你的问题是否具体是关于如何做这与dplyr,或一般如何做。