dplyr:row_number()不使用sql表(SQLite)

dplyr:row_number()不使用sql表(SQLite),sql,r,sqlite,dplyr,tidyverse,Sql,R,Sqlite,Dplyr,Tidyverse,如果我想创建一个包含观测值和数据帧的新列,我可以 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()) mydb%变异(i=row\u number())

如果我想创建一个包含观测值和数据帧的新列,我可以

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())
mydb%变异(i=row\u number())
错误:

此数据库不支持窗口函数
行号()


有没有其他方法可以解决这个问题?

您可以使用类似这样的SQLite语法来解决这个问题

RSQLite::dbSendQuery(mydb, "ALTER TABLE mt ADD COLUMN i INTEGER")
RSQLite::dbSendQuery(mydb, "UPDATE mt SET (i) = ROWID")
然后,您可以继续使用
dplyr
语法,就像从db连接重新分配
mt
mt.sql
对象之后一样

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

SQLite不支持行号功能。

您是否尝试了
mtcars%>%mutate(i=行号(desc(disp)))

即使在SQL中,它也适用于我。

您可以改用
1:n(.)
吗?错误:此数据库不支持窗口函数
n()。。。另外
dim(mt.sql)
returns
c(NA,11)
…您看过了吗?我认为在sql中,如果不运行查询,您就无法知道输出的行数,因此我认为这与dplyr的延迟评估原则和数据库背道而驰。您可以直接运行查询
SELECT COUNT*FROM mt
。或者
altertable…
如果您想修改服务器上的表,我正在尝试编写一个函数来对sql表进行计算,因此我使用dplyr。我需要的功能,以正常的dfs以及工作。谢谢你的帮助。但这意味着什么?