[英]Unable to use rank() over functions in R using sqldf
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 包,它開始拋出以下錯誤:
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 rank1 from arm (Function)未找到“rank”;SQL 語句:從 arm [90022-175] 中選擇 a、b、rank() over(按 b 的順序分區)作為 rank1
如何在R的sqldf包中對sql的函數使用rank()?
sqldf 使用不支持rank()
函數的 SQLite - 請參閱此處。 從您從 H2 獲得的錯誤消息來看,它也沒有,盡管目前正在計划中。
sqldf 可以使用 PostgreSQL 而不是 SQLite,后者確實支持 rank(): 請參見此處的示例。 您發布的代碼應該可以工作。
如果您不想使用 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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.