r - 从 Postgres DB 对 dplyr 中的时间序列数据进行下采样

标签 r postgresql dplyr psql

我正在尝试使用 dplyr 从 psql 查询数据。我的数据采用以下格式。

date                  name    value
10-12-2012 10:01:00   var1    100
10-12-2012 10:55:00   var1    200
10-12-2012 11:01:00   var1    150
10-12-2012 11:50:00   var1    100
10-12-2012 12:11:00   var1    50
10-12-2012 12:40:00   var1    150
10-12-2012 10:01:00   var2    10
10-12-2012 10:33:00   var2    20
10-12-2012 11:04:00   var2    15
10-12-2012 11:45:00   var2    25
10-12-2012 12:02:00   var2    10
10-12-2012 12:55:00   var2    8

我想将数据聚合到每小时(或预定义的采样时间),并想要该小时内“值”列的平均值。

要求的输出:

date                  name    value
10-12-2012 10:00:00   var1    150
10-12-2012 11:00:00   var1    125
10-12-2012 12:00:00   var1    100
10-12-2012 10:00:00   var2    15
10-12-2012 11:00:00   var2    20
10-12-2012 12:00:00   var2    9

我可以直接使用这个查询在 postgres 中执行此操作:

"SELECT date_trunc('hour', date), name, mean_arr(array_agg(cast(value as double precision))) FROM TABLENAME WHERE name IN ("var1","var2")

我想知道,我们是否可以使用 dplyr 做同样的事情。

我目前正在 dplyr 中使用此命令连接到数据库:

my_db <- rc_postgres(dbname="DBNAME",host="HOST",port="PORT",user="USER",password="PASSWD")
tbl_df <- tbl(my_db, "TABLENAME")

原始查询如下:

dataOut <- data.frame(tbl_df%>% select(date,name,value) %>% filter(name %in% c('var1','var2') 

请注意,我目前还没有聚合数据,但我想这样做。

如果有人有答案,请告诉我。 谢谢 普拉迪普

最佳答案

这不会直接与您的 SQL 表一起使用。但这是我会做的:

library(tidyr)
library(dplyr)

df <- tbl_df %>%
  separate(date, into = c("date", "time"), sep = " ") %>%
  separate(time, into = c("hour", "minute", "seccond"), sep = ":") %>%
  group_by(date, hour, name) %>%
  summarise(mean(value)) %>%
  ungroup() %>%
  arrange(name) %>%
  collect()

#> df
#Source: local data frame [6 x 4]
#
#        date hour name mean(value)
#1 10-12-2012   10 var1         150
#2 10-12-2012   11 var1         125
#3 10-12-2012   12 var1         100
#4 10-12-2012   10 var2          15
#5 10-12-2012   11 var2          20
#6 10-12-2012   12 var2           9

关于r - 从 Postgres DB 对 dplyr 中的时间序列数据进行下采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27396826/

相关文章:

r - 计算变量的 5 个最高值

r - 从R动态加载user32.dll并调用外部函数

r - 如何将 huxtable 居中?

postgresql - 如何在 postgresql 中显示用户的 udt 定义?

postgresql - 在 plpgsql 中以编程方式访问记录的列

r - 在用户定义的函数中使用胶水进行变异

r - 如何在使用 R 中的 group_by 构建的散点图中使用不同回归模型的结果?

python - Django 相关领域总是仅在生产中抛出完整性错误

r - 如何修改选定行的n个后续值

r - 获取数据框中各组的标准差