2013-07-02 4 views
0

xts 객체의 시간 가중 평균 (예 : 5 분)을 계산하는 방법 : weighted.mean()을 알고 있지만 날짜 및 시간을 처리하는 방법을 알지 못합니다. 감사xts 또는 동물원의 시간 가중 평균

library(xts) 
    structure(c(28.2, 28.2, 28.2, 28.2, 28.1, 28.1, 28.1, 28.1, 28.1, 
28.2, 28.3, 28.2, 28.2, 28.1, 28.1, 28.1, 28.1, 28.1, 28, 28, 
28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 27.9, 27.9, 27.9, 27.9, 
27.9, 27.9, 27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 
27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 
27.7, 27.7, 27.7, 27.8), class = c("xts", "zoo"), .indexCLASS = c("POSIXct", 
"POSIXt"), tclass = c("POSIXct", "POSIXt"), .indexTZ = "", tzone = "", index = structure(c(1356998400, 
1356998460, 1356998520, 1356998580, 1356998640, 1356998700, 1356998760, 
1356998880, 1356998940, 1356999000, 1356999060, 1356999120, 1356999180, 
1356999240, 1356999300, 1356999360, 1356999420, 1356999480, 1356999540, 
1356999600, 1356999660, 1356999720, 1356999780, 1356999840, 1356999900, 
1356999960, 1357000020, 1357000080, 1357000140, 1357000200, 1357000260, 
1357000320, 1357000380, 1357000440, 1357000500, 1357000560, 1357000620, 
1357000680, 1357000740, 1357000800, 1357000860, 1357000920, 1357000980, 
1357001040, 1357001100, 1357001160, 1357001220, 1357001280, 1357001340, 
1357001400, 1357001460, 1357001520, 1357001580, 1357001640, 1357001700, 
1357001760, 1357001820, 1357001880, 1357001940, 1357002000), tzone = "", tclass = c("POSIXct", 
"POSIXt")), .Dim = c(60L, 1L)) 
+1

삭제 한 질문에 그다지 좋지 않습니다. 몇 가지 샘플 데이터를 제공하는 것이 좋지만 결과는 무엇입니까? 데이터는 규칙적이므로 평균 및 시간 가중 평균은 동일합니다. 당신이 묻는 것은 여전히 ​​매우 명확하지 않습니다. –

+0

죄송합니다. 그 사이에 하나의 항목을 삭제하지 않으 셨습니다. 이제는 더 이상 일반 적이 아닙니다. 단지 한 시간에 5 개의 값이 누락되는 예입니다. –

답변

2

는 당신이 요구하고 있지만, 코드가 아래의 각 겹치지 10 분 간격으로 시간 가중 평균을 계산합니다 무엇인지 아직 확실하지 않다. 7 번째와 8 번째 관측 사이를 제외하고 모든 데이터가 매분마다 한 번 발생하므로 모든 행 (첫 번째 행 제외)은 일반 평균과 같습니다.

x <- structure(c(28.2, 28.2, 28.2, 28.2, 28.1, 28.1, 28.1, 28.1, 28.1, 28.2, 
    28.3, 28.2, 28.2, 28.1, 28.1, 28.1, 28.1, 28.1, 28, 28, 28, 28, 28, 28, 28, 
    28, 28, 28, 28, 28, 27.9, 27.9, 27.9, 27.9, 27.9, 27.9, 27.8, 27.8, 27.8, 
    27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 27.8, 
    27.8, 27.8, 27.8, 27.8, 27.7, 27.7, 27.7, 27.8), class = c("xts", "zoo"), 
    .indexCLASS = c("POSIXct", "POSIXt"), tclass = c("POSIXct", "POSIXt"), 
    .indexTZ = "", tzone = "", index = structure(c(1356998400, 1356998460, 
    1356998520, 1356998580, 1356998640, 1356998700, 1356998760, 1356998880, 
    1356998940, 1356999000, 1356999060, 1356999120, 1356999180, 1356999240, 
    1356999300, 1356999360, 1356999420, 1356999480, 1356999540, 1356999600, 
    1356999660, 1356999720, 1356999780, 1356999840, 1356999900, 1356999960, 
    1357000020, 1357000080, 1357000140, 1357000200, 1357000260, 1357000320, 
    1357000380, 1357000440, 1357000500, 1357000560, 1357000620, 1357000680, 
    1357000740, 1357000800, 1357000860, 1357000920, 1357000980, 1357001040, 
    1357001100, 1357001160, 1357001220, 1357001280, 1357001340, 1357001400, 
    1357001460, 1357001520, 1357001580, 1357001640, 1357001700, 1357001760, 
    1357001820, 1357001880, 1357001940, 1357002000), tzone = "", 
    tclass = c("POSIXct", "POSIXt")), .Dim = c(60L, 1L)) 
y <- cbind(x, c(0,diff(.index(x)))) 
f <- function(z) weighted.mean(z[,1],z[,2]) 
period.apply(y, endpoints(y, "minutes", 10), f) 
#       [,1] 
# 2012-12-31 18:09:00 28.13333 
# 2012-12-31 18:19:00 28.14000 
# 2012-12-31 18:29:00 28.00000 
# 2012-12-31 18:39:00 27.88000 
# 2012-12-31 18:49:00 27.80000 
# 2012-12-31 18:59:00 27.77000 
# 2012-12-31 19:00:00 27.80000 
+0

코드를 적용하고 10 분을 5로 바꾸면 같은 결과를 얻습니다. 그것은 순수한 우연의 일치입니까? – dickoa

+0

@dickoa : 동일하지 않습니다. 첫 번째 행은 다르다. 나는 나의 대답에서 설명했다. –

+0

+1 나는 지금 나는 이해한다. 그래서 나는 나의 대답을 지울 것이다. 감사 – dickoa