道歉,如果这是一个显而易见的问题,但我是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
答案 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