2017-02-21 1 views
1

1 초 간격으로 데이터가 0.1 초 또는 10 초임 따라서 244 * 60 * 60 * 10을 기준으로 하루 864000 회선 .UTC 십진 시간을 사용하여 0.1 초에서 30 분 (30 분)까지의 시간 간격

내 데이터에서 0.1 초 시간 단계에서 30 분으로 집계하여 열의 평균값 (풍속 및 기타 변수는 여기에 표시되지 않음)을 찾고 싶습니다. 그래서 데이터 (하루 동안) 48 개 라인 864000 개 라인에서 집계됩니다

입력 :

  tms Hr Min Sec Wind speed 
7/13/2014 0:00 0 0 0 3.45 
7/13/2014 0:00 0 0 0.1 52.34 
7/13/2014 0:00 0 0 0.2 1.23 
7/13/2014 0:00 0 0 0.3 4.3 
7/13/2014 0:00 0 0 0.4 1.34 
7/13/2014 0:00 0 0 0.5 3.6 

출력 내가보고 싶어 : 시간당 평균에 대한

Year Month Day Hr Wind speed 
7/13/2014 7 13 0 21.92 
7/13/2014 7 13 0.5 29.38 
7/13/2014 7 13 1 24.18 
7/13/2014 7 13 1.5 1.70 
7/13/2014 7 13 2 1.80 

내 코드를 내가 원하는 30 분 (1 시간이 아닌)까지 데이터를 집계하도록 변경합니다. 어디 dattms 열없이 데이터입니다 : 그래서 날짜 열을 추가했습니다.

library(data.table) 
library(xts) 
dat <- data.table(dat) 
tms <- as.POSIXct(seq(0,24*(60*60*10)-1,by=1),origin="2014-07-13",tz="UTC") 
xts.ts <- data.frame(xts(dat,tms)) 

지금 내 데이터
Aut <- data.frame(tms,xts.ts, check.names=FALSE, row.names=NULL) 
mean2 <- aggregate(Aut, 
        list(hour=cut(as.POSIXct(Aut$tms), "hour")), 
        mean) 

그러나 심지어 매 시간이 정확하지에 tms 열을 추가했다. 나는 내 데이터의 평균을 30 분으로 원해. 어떤 제안? 나는 내 댓글에서 언급 한 바와 같이

+0

출력물을 원하는대로 나에게 명확하지 않습니다. xts를 사용하면 시간에 따라 집계하는 것이 쉽지만 재현 가능한 입력 ('dat'은 정의되지 않음) 또는 예상 한 결과의 예를 제공하지 않았습니다. 이 두 가지를 제공하면 몇 가지 답을 얻게 될 것입니다. –

+0

나는 그것을 편집했으나 아마도 형식화가 필요합니다. – Wisconsin

+0

@JoshuaUlrich 나는 그것을 편집하고 결과를 제공했지만 형식화에 어떤 일이 일어 났는지 확신하지 못했습니다. 나는 0.1 초 시간 단계에서 30 분 (0.5 시간)까지의 평균값을 원합니다. 그래서 하루에 864000 라인에서 48 라인으로 데이터를 롤백 – Wisconsin

답변

1

, 당신은 xts::period.apply 쉽게이 작업을 수행 할 수 있습니다 당신은 결과가 추가 열이 추가와 data.table 또는 data.frame을하고 싶다면

library(xts) 
options(digits.secs = 1) # display fractional seconds 
# create 1 day of timestamps that are 0.1 seconds apart 
tms <- as.POSIXct(seq(0, 86400-1, by=0.1), origin="2014-07-13", tz="UTC") 
# create an xts object with some random data and the times created above 
set.seed(21) 
xts.ts <- xts(runif(length(tms), 0, 50), tms) 
# use period.apply and endpoints to calculate the 30-minute means 
mean30min <- period.apply(xts.ts, endpoints(xts.ts, "mins", 30), mean) 
# round up to next 30-minute period 
mean30min <- align.time(mean30min, 60*30) 

을 수행 할 수 있습니다 그것은 집계 후 쉽게.

library(data.table) 
dt.mean30 <- as.data.table(mean30min) 
dt.mean30[, Month := .indexmon(mean30min) + 1] 
dt.mean30[, Day := .indexmday(mean30min)] 
dt.mean30[, Hr := .indexhour(mean30min) + .indexmin(mean30min)/60] 
+0

@ Joshuha 고마워. 내가 마침표를 적용했을 때 "끝점 (xts.ts,"min ", 30)에서 오류가 발생했습니다 :"인수 "에서 지원되지 않음 또한 tms 길이는 864000이어야합니다 (교정을 시도 할 수 있음) – Wisconsin

+0

@Kristofersen ..... – Wisconsin

+0

@Wisconsin : 고정. 내 편집을 참조하십시오. –

관련 문제