R: SQL 均值提取查询

R: SQL query for mean extraction

我想通过 CD_TALHAOID_UNIQUEDATA_S2 使用带有 glue 包的 SQL 查询来聚合 CD 的意思.但是当我尝试时:


library(dplyr)
library(rgdal)
library(rgeos)
library(DBI)
library(glue)

# get AOI
download.file(
  "https://github.com/Leprechault/trash/raw/main/stands_example.zip",
  zip_path <- tempfile(fileext = ".zip")
)
unzip(zip_path, exdir = tempdir())

# Open the files 
setwd(tempdir())
stands_ds <- read.csv("pred_target_stands.csv", sep=";") # Data set
stands_ds <- stands_ds %>%
  mutate(DATA_S2 = ymd(DATA_S2))
stands_ds$CLASS<-c(rep("A",129),rep("B",130)) 
stands_ds$CD<-abs(rnorm(length(stands_ds[,1]),mean=50))

# Crete like a SQL server condition
bq_conn<- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
DBI::dbWriteTable(bq_conn, "stands_ds", stands_ds)

# Aggregate CD mean by CD_TALHAO, ID_UNIQUE and DATA_S2
sqlInput_pred_FARM <- glue::glue_sql("SELECT * FROM stands_ds AVG(CD) GROUP BY CD_TALHAO = {x} AND ID_UNIQUE = {y} AND DATA_S2 = {z}",
 x = "001G", y = "CERROCOROADO_001G", 
 z = "2021-04-02",.con=bq_conn)
pred_attack_BQ_FARM  <- dbGetQuery(bq_conn, as.character(sqlInput_pred_FARM, stringsAsFactors = T))


我总是将 Error: near "(": syntax error 作为输出。请问有什么帮助吗?

尝试以下操作:

statement <- "SELECT * FROM stands_ds AVG(CD) 
              GROUP BY CD_TALHAO = ? AND ID_UNIQUE = ? AND DATA_S2 = ?"

pars <- list("001G", "CERROCOROADO_001G","2021-04-02")

pred_attack_BQ_FARM  <- dbGetQuery(bq_conn, statement, params = pars)

抱歉 @KU99,但您的解决方案 return 不是我预期的平均值。现在,我尝试了一些新的东西,比如为我的平均操作创建对象,尽管 REPLICATE(DATE()) 的结果有些丑陋,但现在可以了。解决方案是:

# Aggregate CD mean by CD_TALHAO, ID_UNIQUE and DATA_S2
sqlInput_pred_FARM <- glue::glue_sql("SELECT REPLICATE(CD_TALHAO,1) AS TALHAO, REPLICATE(ID_UNIQUE,1) AS ID, REPLICATE(DATE(DATA_S2),1) AS DATE, AVG(CD) AS CD FROM stands_ds GROUP BY CD_TALHAO = {x},ID_UNIQUE = {y}, DATA_S2 = {z} ORDER BY CD_TALHAO = {x},ID_UNIQUE = {y}, DATA_S2 = {z}",
                                      x = "001G", y = "CERROCOROADO_001G", 
                                      z = "2021-04-02",.con=bq_conn)
pred_attack_BQ_FARM  <- dbGetQuery(bq_conn, as.character(sqlInput_pred_FARM, stringsAsFactors = T))
pred_attack_BQ_FARM 
#  TALHAO                ID        DATE       CD
#1   001C CERROCOROADO_001C -4661-02-24 49.93823
#2   001G CERROCOROADO_001G -4661-02-24 50.12102