2017-03-31 2 views
0

R에 새로 워진 점은이 문제와 관련하여 도움을 주셔서 감사합니다.불연속 15 분 시계열 데이터 세트가있는 연속 15 분 시계열 데이터 집합

나는 병합하고 싶은 두 개의 15 분 시계열 데이터 세트가 있습니다. 그런 다음이 병합 된 데이터 집합의 변수 조합을 공통 x 축에 플로팅하고 싶습니다. 여기 catch가 있는데, 데이터 셋 중 하나에 값/날짜가 없습니다.

A는 posixlt 및 14 개의 숫자 변수 (수질 관련)로 포맷 된 날짜 - 시간 열이 있습니다. 독서는 15 분 간격으로합니다. 그러나 시계열이 불완전하고 장비 오류로 인해 일부 수치가 누락되었습니다. B에는 posixlt 및 1 숫자 변수로 형식이 지정된 15 분 간격 날짜 - 시간 열도 있습니다. 그러나이 시리즈는 연속 데이터 즉 누락 된 데이터가 없습니다. 여기

는 짧게 예이지만 데이터 (통지 데이터 A가 2시 45분 판독 누락)에 걸쳐 무작위로 반복하여이 문제를, 약 6 개월 덮는 : 여기
Temp Turb   DATETIME     Q   DATETIME  
1 21 5 2017-03-19 02:00:00    1 3 2017-03-19 02:00:00 
2 15 5 2017-03-19 02:15:00    2 3 2017-03-19 02:15:00 
3 18 5 2017-03-19 02:30:00    3 3 2017-03-19 02:30:00 
4 17 17 2017-03-19 03:00:00    4 5 2017-03-19 02:45:00 
5 18 5 2017-03-19 03:15:00    5 7 2017-03-19 03:00:00 
6 17 5 2017-03-19 03:30:00    6 6 2017-03-19 03:15:00 
7 17 6 2017-03-19 03:45:00    7 4 2017-03-19 03:30:00  
              8 3 2017-03-19 03:45:00 

을 단축하기위한 코드 예.

A<- data.frame("DATE" =c("3/19/17","3/19/17","3/19/17","3/19/17", 
         "3/19/17","3/19/17","3/19/17"), "TIME"=c("02:00:00","02:15:00", 
         "02:30:00","03:00:00","03:15:00","03:30:00","03:45:00"), 
         "Temp" = c(21,15,18,17,18,17,17), "Turb" = c(5,5,5,17,5,5,6)) 
          A$DATETIME <-paste(A$DATE,A$TIME) 
         A$DATETIME <- strptime(A$DATETIME, "%m/%d/%y %H:%M:%S") 
         A<-subset(A, select = -c(DATE,TIME)) 
B <- data.frame("DATE" =c("3/19/17","3/19/17","3/19/17","3/19/17", 
         "3/19/17","3/19/17","3/19/17","3/19/17"), "TIME"=c("02:00:00","02:15:00", 
         "02:30:00","02:45:00","03:00:00","03:15:00","03:30:00","03:45:00"), 
         "Q" = c(3,3,3,5,7,6,4,3)) 
          B$DATETIME <-paste(B$DATE,B$TIME) 
          B$DATETIME <- strptime(B$DATETIME, "%m/%d/%y %H:%M:%S") 
         B<-subset(B, select = -c(DATE,TIME)) 

I는 A와 B의 수치 변수는 상호 교환 및 B. 불행히도 15 분의 시간으로 나타내 어질 수 있도록 블랭크와 누락 된 데이터를 기입하는 padr를 사용하는 역전 된 비표준 시간 padr 사용 간격. 예를 들어 스택 오버플로가 보였습니다. 가장 가까운 셀은 here 이었지만 제대로 작동하지 않았습니다. 내 데이터 세트를 1 분 데이터 간격으로 압축했지만 NA는 15 분 표시에서도 모든 숫자 변수를 대체했습니다. DateTime 변수와 같은 오류가 포함 된 오류는 정렬되지 않았습니다.

링크 된 예에 대한 기타 권장 사항이나 구체적인 지침이 있습니까? 감사!!!

답변

0

full_join은 원하는 결과를 제공합니까? 아래 코드에서 DATETIMEPOSIXct 형식으로 변환해야하지만 필요하면 다시 변환 할 수 있습니다.

library(dplyr) 

A$DATETIME = as.POSIXct(A$DATETIME) 
B$DATETIME = as.POSIXct(B$DATETIME) 

AB = full_join(A, B, by="DATETIME") # a dplyr function 
기본 R로
Temp Turb   DATETIME Q 
1 21 5 2017-03-19 02:00:00 3 
2 15 5 2017-03-19 02:15:00 3 
3 18 5 2017-03-19 02:30:00 3 
4 17 17 2017-03-19 03:00:00 7 
5 18 5 2017-03-19 03:15:00 6 
6 17 5 2017-03-19 03:30:00 4 
7 17 6 2017-03-19 03:45:00 3 
8 NA NA 2017-03-19 02:45:00 5 

, 동등한은 다음과 같습니다

AB = merge(A,B, by="DATETIME", all=TRUE) 
1

당신은 XTS와 함께이 문제를 해결하지만, XTS 매트릭스처럼 마음에 유지할 수 있습니다 : 그것은 수 한 가지 유형의 데이터 만 저장합니다. 또한 POSIXlt 개체에 포함 된 특정 요소에 액세스해야하는 경우가 아니면 POSIXlt 대신 POSIXct을 사용해야합니다. 당신이 원하는 경우

require(xts) 
a <- xts(A[,c("Temp","Turb")], as.POSIXct(A$DATETIME)) 
b <- xts(B["Q"], as.POSIXct(B$DATETIME)) 
(x <- merge(a, b)) 
#      Temp Turb Q 
# 2017-03-19 02:00:00 21 5 3 
# 2017-03-19 02:15:00 15 5 3 
# 2017-03-19 02:30:00 18 5 3 
# 2017-03-19 02:45:00 NA NA 5 
# 2017-03-19 03:00:00 17 17 7 
# 2017-03-19 03:15:00 18 5 6 
# 2017-03-19 03:30:00 17 5 4 
# 2017-03-19 03:45:00 17 6 3 

, 당신은 data.frame 다시 결과를 변환 할 수 있습니다

d <- data.frame(DATETIME=index(x), x) 
# remove the rownames, if you want 
rownames(d) <- NULL 
print(d) 
#    DATETIME Temp Turb Q 
# 1 2017-03-19 02:00:00 21 5 3 
# 2 2017-03-19 02:15:00 15 5 3 
# 3 2017-03-19 02:30:00 18 5 3 
# 4 2017-03-19 02:45:00 NA NA 5 
# 5 2017-03-19 03:00:00 17 17 7 
# 6 2017-03-19 03:15:00 18 5 6 
# 7 2017-03-19 03:30:00 17 5 4 
# 8 2017-03-19 03:45:00 17 6 3