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“软件包。
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的秩()函数?
发布于 2015-09-03 00:03:37
sqldf使用SQLite,它不支持rank()函数- 请看这里。从您从H2获得的错误消息中,它也不是,尽管它是目前计划。
sqldf具有使用PostgreSQL而不是SQLite的功能,SQLite支持一个示例的请看这里 ()。然后,发布的代码应该会正常工作。
如果不想使用PostgreSQL,可以使用SQLite和sqldf以正确的顺序获取数据:
sqldf("select a, b from arm
order by a, b", drv = "SQLite")由于您已经在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]https://stackoverflow.com/questions/32364351
复制相似问题