簡體   English   中英

無法使用 sqldf 在 R 中的函數上使用 rank()

[英]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")

但排名欄更難 - 查看一些相關答案: 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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM