我有一个不规则的时间序列,数据集中存在间隙 . 此外,数据被分组 . 滞后函数我已经能够通过观察找到滞后(因此他们找到数据集中的先前记录),但我想指定一个时间变量并通过匹配滞后时间计算滞后 . 这个问题:R lag/lead irregular time series data正在做类似的事情 . 但是,我不能使用 zoo
解决方案(我有某种程序包不兼容,根本不能使用 zoo
)并且未能成功地使 data.table
解决方案变得足够灵活,可以用作滞后量作为输入的函数和分组数据的能力 .
测试数据:
testdf <- data.frame(group = c(1,1,1,1,1,2,2,2,2,2),
counter = c(1,2,3,5,6,7,8,9,11,12),
xval = seq(100, 1000, 100))
lagamount <- 1
输出应为矢量:NA 100 200 NA 400 NA 600 700 NA 900
这就是我目前使用的内容:
library(dplyr)
testout <- group_by(testdf, group) %>%
mutate(testout = function(x) which((testdf$counter - x) == lagamount))
这给了我一个数据类型错误,某些东西(未指定)不是一个向量 .
有没有办法让这个建筑工作?或者,如何使用分组变量来处理不规则的时间序列?
2 回答
在
dplyr
中执行此操作的唯一方法是,在不使用do
的情况下,首先将隐式缺失值显式化,然后将其过滤掉 .提供一个变异的向量,并使用
ifelse
(或者可能是新的dplyr::if_else
)来检查滞后是否是你想要的 . 例:生产环境 :
当我将上述答案转换为函数时,我最终必须明确地展开扩展并删除if_else中的严格数据类型 . 这是最终形式 .
测试用例是: