R滞后/超前不规则时间序列数据 [英] R lag/lead irregular time series data
本文介绍了R滞后/超前不规则时间序列数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有不规则的时间序列数据帧,其中包含time
(秒)和value
列.我想添加另一列value_2
,其中值以delay
秒为单位.因此,时间t
的value_2
等于时间t + delay
或之后的value
.
I have irregular time series data frame with time
(seconds) and value
columns. I want to add another column, value_2
where values are lead by delay
seconds. So value_2
at time t
equals to value
at time t + delay
or right after that.
ts=data.frame(
time=c(1,2,3,5,8,10,11,15,20,23),
value=c(1,2,3,4,5,6,7,8,9,10)
)
ts_with_delayed_value <- add_delayed_value(ts, "value", 2, "time")
> ts_with_delayed_value
time value value_2
1 1 1 3
2 2 2 4
3 3 3 4
4 5 4 5
5 8 5 6
6 10 6 8
7 11 7 8
8 15 8 9
9 20 9 10
10 23 10 10
我有此函数的自己的版本add_delayed_value
,这里是:
I have my own version of this function add_delayed_value
, here it is:
add_delayed_value <- function(data, colname, delay, colname_time) {
colname_delayed <- paste(colname, sprintf("%d", delay), sep="_")
data[colname_delayed] <- NaN
for (i in 1:nrow(data)) {
time_delayed <- data[i, colname_time] + delay
value_delayed <- data[data[colname_time] >= time_delayed, colname][1]
if (is.na(value_delayed)) {
value_delayed <- data[i, colname]
}
data[i, colname_delayed] <- value_delayed
}
return(data)
}
有没有一种方法可以向量化此例程以避免慢循环?
Is there a way to vectorize this routine to avoid the slow loop?
我对R很陌生,所以这段代码可能有很多问题.有什么可以改进的吗?
I'm quite new to R, so this code probably has lots of issues. What can be improved about it?
推荐答案
您可以尝试:
library(dplyr)
library(zoo)
na.locf(ts$value[sapply(ts$time, function(x) min(which(ts$time - x >=2 )))])
[1] 3 4 4 5 6 8 8 9 10 10
这篇关于R滞后/超前不规则时间序列数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文