gpt4 book ai didi

r - 不规则时间序列的 dplyr 自定义滞后函数

转载 作者:行者123 更新时间:2023-12-01 12:27:08 24 4
gpt4 key购买 nike

我有一个不规则的时间序列,数据集中存在间隙。此外,数据被分组。滞后函数我已经能够通过观察找到滞后(因此它们在数据集中找到了先前的记录),但我想指定一个时间变量并通过匹配滞后时间来计算滞后。本题: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))

这给了我一个数据类型错误,某些东西(未指定的)不是向量。

有没有办法让这个建筑工作?或者,我怎么会滞后于带有分组变量的不规则时间序列?

最佳答案

dplyr 中执行此操作的唯一方法是,在不使用 do 的情况下,首先使隐式缺失值显式化,然后将其过滤掉。

提供一个向量进行变异,并使用 ifelse(或者可能是新的 dplyr::if_else)来检查滞后是否是您想要的。示例:

library(tidyr)
lagamount <- 2

testout <- group_by(testdf, group) %>%
complete(group, counter = min(counter):max(counter)) %>%
mutate(testout = if_else(counter - lag(counter, lagamount) == lagamount,
lag(xval, lagamount),
NA_real_)) %>%
filter(!is.na(xval))

产生:

Source: local data frame [10 x 4]
Groups: group [2]

group counter xval testout
<dbl> <dbl> <dbl> <dbl>
1 1 1 100 NA
2 1 2 200 NA
3 1 3 300 100
4 1 5 400 300
5 1 6 500 NA
6 2 7 600 NA
7 2 8 700 NA
8 2 9 800 600
9 2 11 900 800
10 2 12 1000 NA

关于r - 不规则时间序列的 dplyr 自定义滞后函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38245975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com