2014-10-03 2 views
1

15 분짜리 데이터를 매일 평균으로 변경하고 싶습니다. 방금 Columbia 데이터를 아래에 나열했지만 다른 데이터 (CR1 및 CR2)는 해당 데이터를 나열하지 않았습니다. 나는 내 코드를 바닥에 뒀다.15 분 데이터를 일일 평균으로 변경 R

x <- xts(d[,-1], as.POSIXct(d[,1], format="%Y-%m-%d %H:%M", tz = "EST")) 
Error in as.POSIXct.default(d[, 1], format = "%Y-%m-%d %H:%M", tz = "EST") : 
    do not know how to convert 'd[, 1]' to class “POSIXct”" 

저는 R에 매우 익숙합니다. 대답이 매우 간단하고 유감 스럽지만 미안 해요.

datetime   Discharge Columbia 
2014-01-19 22:00 6030 4.3 
2014-01-19 22:15 5970 4.28 
2014-01-19 22:30 5880 4.25 
2014-01-19 22:45 5830 4.23 
2014-01-19 23:00 5710 4.19 
2014-01-19 23:15 5620 4.16 
2014-01-19 23:30 5510 4.12 
2014-01-19 23:45 5400 4.08 
2014-01-20 00:00 5340 4.06 
2014-01-20 00:15 5290 4.04 
2014-01-20 00:30 5260 4.03 
2014-01-20 00:45 5210 4.01 
2014-01-20 01:00 5180 4 
2014-01-20 01:15 4990 3.93 
2014-01-20 01:30 4830 3.87 
2014-01-20 01:45 4810 3.86 
2014-01-20 02:00 4780 3.85 
2014-01-20 02:15 4780 3.85 
2014-01-20 02:30 4760 3.84 
2014-01-20 02:45 4760 3.84 
2014-01-20 03:00 4760 3.84 
2014-01-20 03:15 4760 3.84 

USGS_Columbia_Data <- read.csv("~/Desktop/R/USGS_Columbia_Data.csv",header=TRUE) 
## daily averages of the data 
library(xts) 
d <- structure(list(datetime = (USGS_Columbia_Data[1]), 
       Columbia = (USGS_Columbia_Data[3]), 
       CR1 = (USGS_Columbia_Data[5]), 
       CR2 = (USGS_Columbia_Data[7])), 
      .Names = c("datetime", "Columbia", "CR1", "CR2"), 
      row.names = c(NA, -3L), class = "data.frame") 
x <- xts(d[,-1], as.POSIXct(d[,1], format="%Y-%m-%d %H:%M", tz = "EST")) 
apply.daily(x, colMeans) 
+1

질문 및 답변 http://stackoverflow.com/questions/8886677/aggregating-time-series-in-r –

+0

'aggregate (df [, c (3,4)], list (df $ date), mean)'df'는 붙여 넣은 데이터라고 가정합니다 – Vlo

답변

1

다른 응답 작품은, 분명히, 그러나 당신은 (그리고 아마도한다)이 같은 뭔가를 xts를 사용할 수 있습니다. 문제는 structure(...)을 사용하여 데이터 프레임을 만드는 것입니다. USGS_Columbia_Data은 이미 데이터 프레임입니다. 당신이 열 1,3,5, 7을 추출하려면 다음을 수행 USGS_Columbia_Data 이미 그 열 이름이있는 경우

d <- USGS_Columbia_Data[,c(1,3,5,7)] 
colnames(d) <- c("datetime","Columbia","CR1","CR2"") 

당신은 두 번째 줄 필요하지 않을 수 있습니다. 다음과 같이 날짜 인덱스 xts 객체를 만들 수 있다는 것을 수행 갖는

x <- xts(d[,-1], as.Date(d[,1], format="%Y-%m-%d")) 

을 다음 중 하나를 작동합니다 (내가 여기 예에서 d을 사용하고 있습니다).

apply.daily(x,mean) 
#   Discharge Columbia 
# 2014-01-19 5743.75 4.201250 
# 2014-01-20 4965.00 3.918571 

aggregate(x,as.Date,mean) 
#   Discharge Columbia 
# 2014-01-19 5743.75 4.201250 
# 2014-01-20 4965.00 3.918571 

이 적용됩니다.

x <- xts(d[,-1], as.POSIXct(d[,1], format="%Y-%m-%d %H:%M")) 
apply.daily(x,mean) 
#      Discharge Columbia 
# 2014-01-19 23:45:00 5743.75 4.201250 
# 2014-01-20 03:15:00 4965.00 3.918571 

을하지만 지수는 각 날짜, 날짜가 아닌 자신의 마지막 시간입니다 참고 : POSIXct으로 인덱스를 마칠 경우

이를 사용합니다.

1
당신은 cut를 사용할 수

aggregate

# make certain datetime is class POSIXct 
d$datetime <- as.POSIXct(d$datetime, tz='EST') 

aggregate(list(Discharge = d$Discharge, Columbia = d$Columbia), list(time = cut(d$datetime, "1 day")), mean) 

> aggregate(list(Discharge = d$Discharge, Columbia = d$Columbia), list(datetime = cut(t$datetime, "1 day")), mean) 
     time Discharge Columbia 
1 2014-01-19 5743.75 4.201250 
2 2014-01-20 4965.00 3.918571 
관련 문제