2012-10-25 2 views
11

나는 누군가가 도울 수 있기를 희망하는 시계열 문제가있다!시공간 보간

이 문제는 타임 스탬프가 다른 두 세트의 데이터 세트를 중심으로 이루어집니다. 한 세트의 데이터는 교정 데이터를 포함하고, 다른 세트는 샘플 데이터를 포함합니다. 보정은 샘플보다 훨씬 적습니다.

내가하고 싶은 것은 샘플 데이터 (높은 주파수)에 교정 데이터 (저주파)를 보간하는 것입니다.

sam <- textConnection("time, value 
01:00:52, 256 
01:03:02, 254 
01:05:23, 255 
01:07:42, 257 
01:10:12, 256") 

cal <- textConnection("time, value 
01:01:02, 252.3 
01:05:15, 249.8 
01:10:02, 255.6") 

sample <- read.csv(sam) 

sample$time <- as.POSIXct(sample$time, format="%H:%M:%S") 

calib <- read.csv(cal) 

calib$time <- as.POSIXct(calib$time, format="%H:%M:%S") 

큰 문제는 데이터의 주파수가 무작위로 변경된다는 것입니다.

비슷한 일을 한 사람이 있습니까? 내가 원하는 것을 할 수있는 chron 또는 zoo 기능이 있습니까 (두 주파수가 무작위 인 높은 주파수 데이터에 저주파수 데이터를 삽입).

답변

16

나는 동물원 (또는 XTS)를 사용하고는 같이 할 것이다 :

library(zoo) 
# Create zoo objects 
zc <- zoo(calib$value, calib$time) # low freq 
zs <- zoo(sample$value, sample$time) # high freq 
# Merge series into one object 
z <- merge(zs,zc) 
# Interpolate calibration data (na.spline could also be used) 
z$zc <- na.approx(z$zc, rule=2) 
# Only keep index values from sample data 
Z <- z[index(zs),] 
Z 
#      zs  zc 
# 2012-10-25 01:00:52 256 252.3000 
# 2012-10-25 01:03:02 254 251.1142 
# 2012-10-25 01:05:23 255 249.9617 
# 2012-10-25 01:07:42 257 252.7707 
# 2012-10-25 01:10:12 256 255.6000 
3

당신은 또한이 같은 approx 기능을 사용할 수 있으며, 그것은 훨씬 쉽게 될 것입니다. 데이터 프레임으로 작업하고 있는지 확인하십시오. 또한 as.POSIXct을 사용하여 교정 및 샘플 데이터 세트의 컬럼 형식이 동일한 지 확인하십시오.

calib <- data.frame(calib) 
sample <- data.frame(sample) 

IPcal <- approx(calib$time,calib$value, xout = sample$time, 
       rule = 2, method = "linear", ties = mean) 

IPcal <- data.frame(IPcal) 

head(IPcal) 

#    x  y 
#1 2017-03-22 01:00:52 252.3000 
#2 2017-03-22 01:03:02 251.1142 
#3 2017-03-22 01:05:23 249.9617 
#4 2017-03-22 01:07:42 252.7707 
#5 2017-03-22 01:10:12 255.6000 

더 읽기에 대한 approxapproxfun documentation합니다.