2014-01-08 2 views
1

거기에 비슷한 질문이 있지만 감사 할 수없는 것으로 알고 있습니다. 나는 시간의 시작 부분에서 시작하는 평균화와 함께 5 분 간격으로 한 컬럼의 데이터를 평균화하고자하는 데이터 세트를 가지고있다. 예를 들어, 이전 5 분 동안의 평균 10:00. 09 : 56-10 : 00이 될 것입니다. 여기 datetime에서 선행 5 분 빈에 대한 시간 간격을 기준으로 평균화합니다.

내 데이터 세트의 예입니다 : 나는 아래의 코드를 시도

data <- structure(list(datetime = c("11/07/2013 19:20", "11/07/2013 19:21", 
"11/07/2013 19:22", "11/07/2013 19:23", "11/07/2013 19:24", "11/07/2013 19:25", 
"11/07/2013 19:26", "11/07/2013 19:27", "11/07/2013 19:28", "11/07/2013 19:29", 
"11/07/2013 19:30", "11/07/2013 19:31", "11/07/2013 19:32", "11/07/2013 19:33", 
"11/07/2013 19:34", "11/07/2013 19:35", "11/07/2013 19:36", "11/07/2013 19:37", 
"11/07/2013 19:38", "11/07/2013 19:39", "11/07/2013 19:40", "11/07/2013 19:41", 
"11/07/2013 19:42", "11/07/2013 19:43", "11/07/2013 19:44", "11/07/2013 19:45" 
), met = c(-24.24081371, -24.4280008, -24.35142264, -24.84884114, 
-25.06214408, -25.46749039, -25.44670288, -25.86062294, -26.30899817, 
-26.57565791, -26.6866101, -27.03829228, -27.34621325, -27.91269122, 
-28.60861612, -29.16745075, -28.81285096, -29.89737508, -30.26500716, 
-30.08502411, -31.05084494, -31.21356991, -31.05715444, -32.29645243, 
-32.76946492, -32.69307397)), .Names = c("datetime", "met"), 
class = "data.frame", row.names = c(NA, -26L)) 

하지만 나는 내가 원하는 방식으로 작업을 얻을 수 없었다.

> data$datetime <- as.POSIXct(data$datetime, format="%m/%d/%Y %H:%M") 
> groups <- cut(data$datetime, breaks="5 min") 
> by(data$met, groups, mean) 
groups: 2013-07-11 19:20:00 
[1] -24.58624 
------------------------------------------------------------------------ 
groups: 2013-07-11 19:25:00 
[1] -25.93189 
------------------------------------------------------------------------ 
groups: 2013-07-11 19:30:00 
[1] -27.51848 
------------------------------------------------------------------------ 
groups: 2013-07-11 19:35:00 
[1] -29.64554 
------------------------------------------------------------------------ 
groups: 2013-07-11 19:40:00 
[1] -31.6775 
------------------------------------------------------------------------ 
groups: 2013-07-11 19:45:00 
[1] -32.69307 

정확한 평균 있지만 소인 그래서, R에 의해 주어진다 12시 1분 라기보다 마지막 5 분 동안의 처음 도장 실제로 12시 5분 (12시 1분의 기간 - 12:05). 불행히도 출력을 12/07/2013 12:05 -19.91691과 같은 형식으로 가져올 수 없습니다.

+0

그래서'data $ datetime <- as.POSIXct (데이터 $ datetime, 형식 = "% m/% d/% Y % % H : % M"); (groups <- cut (data $ datetime, breaks = "5 min"))'당신이 찾고 있던 것과 정확하게 일치하지 않습니다. 맞습니까? – lukeA

+0

당신의 코멘트를 주셔서 감사합니다. 이미'data $ datetime <- as.POSIXct (data $ datetime, format = "% m/% d/% Y %%% % M")'및'(groups <- cut data $ datetime, breaks = "5 min")'와'met.5min <- by (data $ met.day.night, groups, mean)'을 사용하지만 올바른 간격이 아니며 데이터 프레임에 있습니다. 수출하는 법을 모르겠다. (나의 무지를 변명해라!) – squishy

+0

예상되는 결과물을 제공하십시오. 데이터의 모든 점에서 5 분 평균을 원하는지, 아니면 집계하여 한 번만 관찰 할 수 있는지 분명하지 않습니다. 5 분 간격으로 (다른 날짜 포함) 예를 들어 –

답변

1

시계열 작업에 가장 적합한 솔루션은 먼저 기존의 시계열 처리 루틴 라이브러리를 사용하는 것입니다. 그러면 시계열 처리 루틴 라이브러리를 구현하는 것이 일반적으로 이러한 집계를 허용합니다. 저는이 일들을 여러 번 반복해서 쓰지 않을 것입니다. 이전의 역할에서 저는 그러한 라이브러리의 구현을 주도하고 있었지만, 독점적입니다. 따라서 힌트 : 매시 최종/최초 순간 data$met 분할

  • 사용 split와 결과 걸쳐
  • 사용 sapply (해당 행의 인덱스를 용이 기본적인 R 지식과 타임 스탬프로부터 얻을 수있다) 임의 집합 함수, ge 당신이 분할

에 사용 된 것과 같은 인덱스를 가진 시계열로 지난 5 개 값을

  • 넣어 결과를 평균하면 정말 C.

    에서 일반 집계 루틴을 prodiving 라이브러리를 취급 시계열을 작성하는 더 나을 것이라고 말해 두 겠는데
  • 관련 문제