gpt4 book ai didi

sql - 无法使用 sqldf 对 R 中的函数使用rank()

转载 作者:行者123 更新时间:2023-12-02 10:47:56 24 4
gpt4 key购买 nike

arm<-as.data.frame(matrix(c(1,1,1,2,2,6,7,4,9,10),ncol=2))

colnames(arm)<-c("a","b")

这是我在 R 中创建的数据集。

现在我想对 b 列进行排名并按 a 列进行分组。

无论我对语法进行什么更改(例如添加 []、""等...),以下代码都会引发此错误

Error in sqliteSendQuery(con, statement, bind.data) : error in statement: near "(": syntax error

我正在使用“sqldf”包。

arm2<-sqldf("select a,
b,
rank() over (partition by a order by b) as rank1
from arm")

然后我安装了 RH2 软件包,它开始抛出以下错误:

Error in .verify.JDBC.result(s, "Unable to execute JDBC statement ", statement) : Unable to execute JDBC statement select a,b,rank() over (partition by a order by b) as rank1from arm (Function "rank" not found; SQL statement: select a,b,rank() over (partition by a order by b) as rank1from arm [90022-175])

如何在R的sqldf包中的sql函数上使用rank()?

最佳答案

sqldf 使用不支持 rank() 函数的 SQLite - see here 。从你从 H2 得到的错误消息来看,它也没有,尽管它是 currently planned .

sqldf 能够使用 PostgreSQL 而不是 SQLite,后者确实支持rank():see here举个例子。您发布的代码应该可以工作。

如果您不想使用 PostgreSQL,您可以使用 SQLite 和 sqldf 以正确的顺序获取数据:

sqldf("select a, b from arm 
order by a, b", drv = "SQLite")

但是排名栏比较难——看一些相关答案:1 , 2 , 3

由于您已经在使用 R,因此您可以使用 dplyr,这是一个原生 R 包:

library(dplyr)
arm %>% group_by(a) %>%
mutate(rank = rank(b))

或者data.table,更快的替代方案:

library(data.table)
setDT(arm)[ , rank := rank(b), by = a]

关于sql - 无法使用 sqldf 对 R 中的函数使用rank(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32364351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com