如果我想创建一个新列,其中包含带有数据帧的观察编号,则可以,

mtcars %>% mutate(i=row_number())


但是row_number()不适用于sql表。

mydb <- dbConnect(RSQLite::SQLite(), "")
dbWriteTable(mydb, "mt", mtcars)
mt.sql=tbl(mydb, "mt")
mt.sql %>% mutate(i=row_number())


错误:


此数据库不支持窗口功能row_number()


还会有其他方法解决此问题吗?

最佳答案

您可以通过使用像这样的SQLite语法来解决它

RSQLite::dbSendQuery(mydb, "ALTER TABLE mt ADD COLUMN i INTEGER")
RSQLite::dbSendQuery(mydb, "UPDATE mt SET (i) = ROWID")


然后,您可以继续使用dplyr语法,例如将mt从数据库连接重新分配给mt.sql对象之后。

mt.sql=tbl(mydb, "mt")
mt.sql %>% select(mpg, i) # e.g.

关于sql - dplyr:row_number()不适用于sql表(SQLite),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46096268/

10-12 17:55