【问题标题】:error when trying to do a running sum in r with sqldf尝试使用 sqldf 在 r 中进行运行求和时出错
【发布时间】:2019-05-12 12:03:55
【问题描述】:

我正在尝试使用 sqldf 计算 R 中的运行总和。

我尝试了几种方法,但我一直收到这个错误,

语句错误:靠近“(”:语法错误

我有一个非常简单的示例数据框 DF <- data.frame(col1 = 1:4, id = 1:12)

这就是我想要做的事情

install.packages('sqldf')
require(sqldf)
sqldf("SELECT col1, SUM(col1) OVER (ORDER BY id) AS runningsum FROM DF")

我想要这样的东西

【问题讨论】:

    标签: r sqldf


    【解决方案1】:

    1) sqlite 使用默认的 sqlite 后端到 sqldf,该语法不受支持,但这有效:

    library(sqldf)
    
    sqldf("select a.*, sum(b.col1) as runningSum
      from DF as a
      left join DF b on a.id >= b.id
      group by a.id")
    

    给予:

       col1 id runningSum
    1     1  1          1
    2     2  2          3
    3     3  3          6
    4     4  4         10
    5     1  5         11
    6     2  6         13
    7     3  7         16
    8     4  8         20
    9     1  9         21
    10    2 10         23
    11    3 11         26
    12    4 12         30
    

    2) H2 使用 H2 后端,我们可以做到这一点:

    library(RH2)
    library(sqldf)
    
    sqldf("select *, set(@i, ifnull(@i, 0) + col1) as runningSum from DF")
    

    3) PostgreSQL 使用 PostgreSQL 后端,可以这样完成:

    library(RPostgreSQL)
    library(sqldf)
    
    sqldf('select
      *,
      sum(col1) over (order by id asc rows between unbounded preceding and current row)
    from "DF"')
    

    【讨论】:

      猜你喜欢
      • 2020-05-27
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 2017-05-06
      • 2015-07-25
      相关资源
      最近更新 更多