【发布时间】:2015-11-28 14:56:38
【问题描述】:
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, statement, 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, "Unable to execute JDBC statement ", statement) 中的错误:无法执行 JDBC 语句 select a, 乙, rank() over (按 b 的顺序分区) 作为 rank1 from arm(未找到函数“rank”;SQL语句:select a, 乙, rank() over (按 b 的顺序分区) 作为 rank1 来自手臂 [90022-175])
如何在 R 的 sqldf 包中使用 rank() over sql 函数?
【问题讨论】:
-
投反对票似乎有点苛刻。该问题概述了使用的包、使用的数据、使用的代码和错误消息。考虑到这里被赞成的一些废话,它显示了解释这个问题的努力。
-
rsqldf 默认使用 sqlite,它没有 rank() 函数。我对 RH2 不熟悉,但似乎 ti 也有同样的问题。您可以按照示例 from here 尝试 postgresql
-
我不明白这个问题。这是错误报告吗?如果是这样,请报告GH。或者您正在寻找通用解决方案?在这种情况下,这个错误应该只是为了显示您最初的努力,因此您可以使用其他一些替代方法,例如
arm$rank1 <- unlist(with(arm, tapply(b, a, rank)))。 -
@DavidArenburg -
unlist(tapply(...))最好替换为ave,因此它不依赖于数据集的顺序。 -
@thelatemail 是的,你说得有道理