R - 将时间序列插入到相同的间隔但是新的时间点

时间:2017-01-12 00:32:48

标签: r time-series intervals linear-interpolation

道歉,如果这是一个显而易见的问题,但我是R的新手,在SAS工作了很多年

我有两个10秒间隔的测量数据文件,但不是在完全相同的时间点。我想转换其中一个时间序列以匹配另一个时间序列,使用线性插值调整其值。在SAS中,我可以通过proc扩展很快地完成这项工作,但我无法在R中找到任何类似的包(我已经看过动物园和xts)。

为了表明我的意思,这里是我的两个文件的片段。在这种情况下,一个时间序列在3&s;而另一个在2' s上。在这种特殊情况下,1秒的差异可能是微不足道的,但这是我在工作中经常遇到的一个问题,所以我想知道是否有任何简单的方法来重新计算,通过线性插值时,第二个数据集中的值也在3'

日期,时间,值

3-NOV-16,13:15:53,264.651

3-NOV-16,13:16:03,264.58

3-NOV-16,13:16:13,264.368

3-NOV-16,13:16:23,264.273

3-NOV-16,13:16:33,264.391

11/3 / 16,11:15:52 PM,10.1

11/3 / 16,11:16:02 PM,10.1

11/3 / 16,11:16:12 PM,10.1

11/3 / 16,11:16:22 PM,10.1

11/3 / 16,11:16:32 PM,10.1

2 个答案:

答案 0 :(得分:2)

您可以使用'约'功能。以下是您的数据示例:

library(data.table)
melt(setDT(data)[, lapply(.SD, function(x) mean(is.na(x)))], 
            variable.name = "Var", value.name = "MeanNA")   
#    Var MeanNA
#1:  c1  0.125
#2:  c2  0.125

答案 1 :(得分:0)

我很抱歉我在尝试评估输入时有点懒惰。我还在学习R.我想知道这段代码是否能解决你的根本问题。

算法很简单

我将所有时间都改为Unix时间,这是自纪元以来的秒数。

我使用unixtime作为x而第二个数字作为y

我根据第二组日期时间创建新数据点作为unixtime。

toUnixTime <- function( dateobj ){
    return (as.numeric(as.POSIXct(dateobj, origin="1970-01-01")))
}

toDateTime <- function( unixtime){
return (as.POSIXct(unixtime, origin="1970-01-01"))
}
toUnix <- function( datetime ){
return ( as.numeric(strptime( datetime, "%d-%b-%y,%H:%M:%S") ) )
}
toUnix2 <- function( datetime ){
return ( as.numeric(strptime( datetime, "%m/%d/%y,%I:%M:%S %p") ) )
}
main <- function(){
x <- c(toUnix("3-Nov-16,13:15:53" ),toUnix("3-Nov-16,13:16:03:53"))
y <- c(264.651,264.58)
f <- approxfun(x,y)
f(toUnix2("11/3/16,1:16:02 PM"))
}
main()

此输出

264.5871 for 11/3/16,1:16:02 PM