Add missing xts/zoo data with linear interpolation in R

半城伤御伤魂 提交于 2019-11-27 16:38:29

问题


I do have problems with missing data, but I do not have NAs - otherwise would be easier to handle...

My data looks like this:

time, value
2012-11-30 10:28:00, 12.9
2012-11-30 10:29:00, 5.5
2012-11-30 10:30:00, 5.5
2012-11-30 10:31:00, 5.5
2012-11-30 10:32:00, 9
2012-11-30 10:35:00, 9
2012-11-30 10:36:00, 14.4
2012-11-30 10:38:00, 12.6

As you can see - there are missing some minute values - it is xts/zoo so I use as.POSIXct... to set the date as an index. How to add the missing timesteps to get a full ts? I want to fill the missing values with linear interpolation.

Thank you for your help!


回答1:


You can merge your data with a vector with all dates. After that you can use na.approx to fill in the blanks (NA in this case).

data1 <-read.table(text="time, value
2012-11-30-10:28:00, 12.9
2012-11-30-10:29:00, 5.5
2012-11-30-10:30:00, 5.5
2012-11-30-10:31:00, 5.5
2012-11-30-10:32:00, 9
2012-11-30-10:35:00, 9
2012-11-30-10:36:00, 14.4
2012-11-30-10:38:00, 12.6", header = TRUE, sep=",", as.is=TRUE)
times.init <-as.POSIXct(strptime(data1[,1], '%Y-%m-%d-%H:%M:%S'))
data2 <-zoo(data1[,2],times.init)
data3 <-merge(data2, zoo(, seq(min(times.init), max(times.init), "min")))
data4 <-na.approx(data3)



回答2:


Thanks to P Lapointe for a cool answer. Also, if you also take advantage of the 'xout' argument in na.approx, you no longer need to do the merger:

data1 <-read.table(text="time, value
2012-11-30-10:28:00, 12.9
2012-11-30-10:29:00, 5.5
                   2012-11-30-10:30:00, 5.5
                   2012-11-30-10:31:00, 5.5
                   2012-11-30-10:32:00, 9
                   2012-11-30-10:35:00, 9
                   2012-11-30-10:36:00, 14.4
                   2012-11-30-10:38:00, 12.6", header = TRUE, sep=",", as.is=TRUE)
times.init <-as.POSIXct(strptime(data1[,1], '%Y-%m-%d-%H:%M:%S'))
data2 <-zoo(data1[,2],times.init)
data2
data4 <- na.approx(object=data2, 
          xout=seq(min(times.init), max(times.init), "min"))


来源:https://stackoverflow.com/questions/16011790/add-missing-xts-zoo-data-with-linear-interpolation-in-r

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!