2013-07-01 1 views
1

큰 벡터의 경우 10 분 시간 블록을 1 분 시간 블록으로 변환하고 싶습니다. 데이터 시간 값은 10 분 간격으로 간격을두고 있습니다.이 시간 간격은 주어진 시간 스탬프에서 끝나는 10 분 시간 블록을 나타냅니다. 아래 예제 데이터를 다음과 같이10 분 시간 블록을 1 분 간격으로 변환하는 방법 R

data<- structure(list(datetime = structure(1:7, .Label = c("30/11/2011 02:32", 
"30/11/2011 02:42", "30/11/2011 02:52", "30/11/2011 03:02", "30/11/2011 03:12", 
"30/11/2011 03:22", "30/11/2011 03:32"), class = "factor"), count = 
c(100L, 60L, 10L, 10L, 200L, 180L, 190L)), .Names = c("datetime", "count"), class = 
"data.frame", row.names = c(NA, -7L)) 

나는 성공적으로 XTS 패키지를 사용하여 내 벡터의 첫 번째와 마지막 시간 값 사이에 1 분 블록에 10 분의 시간 블록을 변환 한 :

data$datetime <- strptime(data$datetime, format="%d/%m/%Y %H:%M") 
data$datetime <- as.POSIXct(data$datetime) 
data_xts <- as.xts(data, order.by=data$datetime) 
dtmins <- seq(start(data_xts$datetime), end(data_xts$datetime), by = "1 min") 

그러나 시간 값은 10 분 블록의 '끝'과 관련되므로 내 벡터의 첫 번째 datetime 행보다 먼저 9 행의 1 분 datetime 값을 만들어야합니다. 나는 다음과 같다 (내 원래 벡터의 마지막 날짜 값에 계속) 출력 벡터와 끝까지 할 : 나는 해결책을 찾기 위해 고군분투

datetime 
30/11/2011 02:23 
30/11/2011 02:24 
30/11/2011 02:25 
30/11/2011 02:26 
30/11/2011 02:27 
30/11/2011 02:28 
30/11/2011 02:29 
30/11/2011 02:30 
30/11/2011 02:31 
30/11/2011 02:32 
30/11/2011 02:33 
30/11/2011 02:34 
30/11/2011 02:35 
30/11/2011 02:36 
30/11/2011 02:37 
etc... 

. 어떤 도움을 많이 주시면 감사하겠습니다!

+0

당신은'to.period'를 보았습니까? – andreister

+0

감사합니다! 네, 한 번 보았습니다. 그러나 이것은 개체를 자신보다 낮은 시간대로만 변환하는 것처럼 보이고, 제가 원하는 추가 분 값을 만드는 해결책을 제공하지 않습니다. – Emily

답변

2

xts 개체를 원하는 시간 순서로 병합하면됩니다.

Data <- structure(list(datetime=structure(c(1322641920, 1322642520, 1322643120, 
    1322643720, 1322644320, 1322644920, 1322645520), class=c("POSIXct", "POSIXt"), 
    tzone=""), count=c(100L, 60L, 10L, 10L, 200L, 180L, 190L)), 
.Names=c("datetime", "count"), row.names=c(NA, -7L), class="data.frame") 

data_xts <- as.xts(Data[,-1], order.by=Data$datetime) 
data_xts <- merge(data_xts, seq(start(data_xts)-60*9, end(data_xts), by="1 min")) 

그럼 당신은 당신이 원하는 경우, 누락 된 값을 입력 할 na.locf 또는 유사한 사용할 수 있습니다.

data_xts <- na.locf(data_xts) 
+0

답변을 많이 해주셔서 감사합니다.하지만 코드는 똑같은 일을합니다 (훨씬 깔끔하지만!). 원래 목록의 시작 및 끝 날짜 시간에 걸쳐 분 값이있는 출력 목록 만 제공합니다. 9 개의 1 분짜리 datetime 값을 추가로 만들고 싶습니다.이 값은 예제에서 보았 듯이 내 벡터에서 첫 번째 datetime보다 9 분 전에 시작됩니다. 감사! – Emily

+0

@Emily : 시작 시간에서 9 분을 뺀다 :'start (data_xts) -60 * 9'. –

+0

화려한 감사합니다! 그게 내가 한 것입니다. – Emily