dplyr不同列值sql
我将dplyr与PostgreSQL数据库结合使用,这使得我很难复制一个示例。无论如何,我想使用distinct函数过滤掉混乱的数据,即重复的时间戳。到目前为止,我已经:dplyr不同列值sql,sql,r,dplyr,Sql,R,Dplyr,我将dplyr与PostgreSQL数据库结合使用,这使得我很难复制一个示例。无论如何,我想使用distinct函数过滤掉混乱的数据,即重复的时间戳。到目前为止,我已经: db <- src_postgres(dbname = "a", host = "b", port = 1234, user = "c") measurements <- tbl(adres_db, "measurement") sites <- group_by(m
db <- src_postgres(dbname = "a", host = "b", port = 1234,
user = "c")
measurements <- tbl(adres_db, "measurement")
sites <- group_by(measurements, site)
sites_clean <- filter(sites,
site < 38)
sites_clean <- distinct(sites_clean, timestamp)
P_stats <- summarise(
sites_clean,
count = n(),
P = mean(p_sum)
)
collect(P_stats)
虽然这样做有效,但我觉得它并不像它可能的那么干净。此外,我还需要在PostgreSQL实例上尝试使用row_numbertimestamp==1的建议。按时间戳分组,然后选择每个组的第一行?感谢您的提示,在阅读详细文档后,我尝试了几次,我发现我应该使用filtersites_clean,row_number==1而不是slice,但是我得到了一个RS-DBI驱动程序:无法检索结果:错误:column measurement.site必须出现在GROUP BY子句中,或者在聚合函数行3中使用:FROM SELECT site,timestamp,count*AS count,AVG…您需要行号,因为DB没有顺序的概念,只是一个旁注:您可以使用dplyr的%>%运算符,这样您就不需要创建许多不同的数据版本/子集。
library(dplyr)
set.seed(1)
my_db <- src_sqlite("my_db.sqlite3", create = T)
meas <- data.frame(id = 1:30,
timestamp = sample(Sys.time() + c(1,2,3) * 3600,
size = 30, replace = TRUE),
site = sample(c(1, 2, 40), size = 30, replace = TRUE),
p_sum = rpois(30, 2))
meas_sqlite <- copy_to(my_db, meas, temporary = FALSE)
meas_tbl <- tbl(my_db, "meas")
P_stats <- group_by(meas_tbl, site, timestamp) %>%
summarise(P = mean(p_sum)) %>%
group_by(site) %>%
filter(site < 38) %>%
summarise(count = n(), P = mean(P))
collect(P_stats)