首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sqldf无法在R中使用秩()对函数

问使用sqldf无法在R中使用秩()对函数
EN

Stack Overflow用户
提问于 2015-09-02 22:44:11
回答 1查看 5.8K关注 0票数 6
代码语言:javascript
复制
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列进行排序。

下面的代码会抛出这个错误,不管我对语法做了什么更改(比如添加[]、"“等等)。

sqliteSendQuery中的错误(con,语句,bind.data):语句中的错误:接近"(":语法错误)

我用的是"sqldf“软件包。

代码语言:javascript
复制
arm2<-sqldf("select a,
         b,
         rank() over (partition by a order by b) as rank1 
         from arm")

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

.verify.JDBC.result中的错误(s,“无法执行JDBC语句",语句):无法执行JDBC语句,从arm中选择a、b、秩() over (按b的顺序进行分区)作为rank1 (函数”秩“未找到;SQL语句:从arm 90022-175中选择a、b、秩() over (按b的顺序进行分区)作为rank1 )

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

EN

回答 1

Stack Overflow用户

发布于 2015-09-03 00:03:37

sqldf使用SQLite,它不支持rank()函数- 请看这里。从您从H2获得的错误消息中,它也不是,尽管它是目前计划。

sqldf具有使用PostgreSQL而不是SQLite的功能,SQLite支持一个示例的请看这里 ()。然后,发布的代码应该会正常工作。

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

代码语言:javascript
复制
sqldf("select a, b from arm 
          order by a, b", drv = "SQLite")

但是排名列更难找到一些相关的答案:1,2,3.

由于您已经在R中,所以可以使用dplyr,这是一个本地的R包:

代码语言:javascript
复制
library(dplyr)
arm %>% group_by(a) %>%
        mutate(rank = rank(b))

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

代码语言:javascript
复制
library(data.table)
setDT(arm)[ , rank := rank(b), by = a]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32364351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档