【问题标题】:Error in rsqlite_send_query(conn@ptr, statement) : near "(": syntax error_____rsqlite_send_query(conn@ptr,语句)中的错误:靠近“(”:语法错误_____
【发布时间】:2018-09-14 15:43:58
【问题描述】:

我必须将行转换为列时出现此错误

library(sqldf)
sqldf("SELECT id,name,ROW_NUMBER() over (PARTITION BY id order by id) as row_no FROM dd")

rsqlite_send_query(conn@ptr, statement) 中的错误:靠近“(”:语法 错误_____

我应该怎么做,或者请给我一个替代方案,因为我想在 shiny 应用程序中使用它

【问题讨论】:

标签: mysql sql r sqldf


【解决方案1】:

假设我们有这个:

library(sqldf)
dd <- data.frame(id = c(1, 2, 3), name = c("A", "B", "C"), X = 1:9)

那么这三个都给出相同的结果:

# 1. PostgreSQL - supports over/partition

library(RPostgreSQL)
sqldf("SELECT id, name, \"X\", ROW_NUMBER() over (PARTITION BY id order by id) as row_no 
       FROM dd order by id")

# 2. SQLite - does not support over/partition, use join instead

# Ensure RPostgreSQL is NOT loaded to force use of SQLite.
sqldf("select a.*, count(*) row_no 
       from dd a join dd b on a.id = b.id and b.rowid <= a.rowid
       group by a.rowid
       order by a.rowid")

# 3. Base R

transform(dd, row_no = ave(1:nrow(dd), id, FUN = seq_along))

【讨论】:

    【解决方案2】:

    sqlite 不支持分区。

    您可能需要检查this link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 2016-06-18
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多