2014-12-10 5 views
3

psql에서 데이터를 쿼리하기 위해 dplyr을 사용하려고합니다. 내 데이터는 다음과 같은 형식입니다.Postgres DB에서 dplyr의 시계열 데이터를 다운 샘플링

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 

는 I 시간별 (또는 소정의 샘플 시간)으로 데이터를 집계 할 그 시간 내에서 "값"열 평균값을 원한다.

필요한 출력은 :

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 

내가 직접 쿼리를 사용하여 포스트 그레스에서이 작업을 수행 할 수 있습니다

"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') 

나는 현재 데이터를 집계하지 않은 것을 참고, 나는하고 싶다.

누군가 답변을했는지 알려주세요. 감사 프라 딥

답변

4

이것은 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 
4

나는 이런 식으로 뭔가를 시도 할 것 : 같이 함께 전달됩니다 번역하는 방법을 알고하지 않습니다 dplyr

tbl_df %>% 
    filter(name %in% c('var1','var2')) %>% 
    transmutate(date_trunc('hour', date), name, mean_arr(array_agg(as.double(value)))) 

모든 기능을합니다.

+0

안녕하세요, 나는 다음과 같은 오류가 나타납니다. eval (expr, envir, enclos) 오류 : "transmutate"함수를 찾을 수 없습니다. – Pradeep

+0

나는 dplyr에서 transmutate에 대한 도움을 찾을 수 없었다. – Pradeep

+4

@Pradeep - 나는 Hadley가 거기에서'transmute'를 의미했을지도 모른다라고 생각한다. –

관련 문제