gpt4 book ai didi

r - 如何在时间序列中自动创建和滞后?

转载 作者:行者123 更新时间:2023-12-03 18:11:06 25 4
gpt4 key购买 nike

我有一个带有 t 列的数据框。我想创建 n 个滞后列,其名称类似于 t-1、t-2 等。

  year      t  t-1 t-2
19620101 1 NA NA
19630102 2 1 NA
19640103 3 2 1
19650104 4 3 2
19650104 5 4 3
19650104 6 5 4

我的想法是分四步做:
  • 使用“粘贴”的列名循环
  • 使用“粘贴”的滞后列的临时数据帧循环
  • 用于创建滞后列的循环
  • cbind他们。

  • 但我无法继续使用代码。粗糙的东西:
    df_final<-lagged(df="odd",n=3)

    lagged<-function(df,n){
    df<-zoo(df)
    lags<-paste("A", 1:n, sep ="_")
    for (i in 1:5) {
    odd<-as.data.frame(lag(odd$OBS_Q,-1*i,na.pad = TRUE))

    #Cbind here
    }

    我一直在写这个函数。你能告诉我一些方法吗?或者另一种更简单的方法来做到这一点......

    引用: Basic lag in R vector/dataframe

    附录:

    真实数据:
    x<-structure(list(DATE = 19630101:19630104, PRECIP = c(0, 0, 0,0), 
    OBS_Q = c(1.61, 1.48, 1.4, 1.33), swb = c(1.75, 1.73, 1.7,1.67),
    gr4j = c(1.9, 1.77, 1.67, 1.58), isba = c(0.83, 0.83,0.83, 0.83),
    noah = c(1.31, 1.19, 1.24, 1.31), sac = c(1.99,1.8, 1.66, 1.57),
    swap = c(1.1, 1.05, 1.08, 0.99), vic.mm.day. = c(2.1,1.75, 1.55, 1.43)),
    .Names = c("DATE", "PRECIP", "OBS_Q", "swb","gr4j", "isba", "noah", "sac", "swap", "vic.mm.day."),
    class = c("data.table","data.frame"), row.names = c(NA, -4L))

    要滞后的列是 OBS_Q。

    最佳答案

    我可能会围绕基本 R 构建一些东西 embed()

    x <- c(rep(NA,2),1:6)
    embed(x,3)
    # [,1] [,2] [,3]
    # [1,] 1 NA NA
    # [2,] 2 1 NA
    # [3,] 3 2 1
    # [4,] 4 3 2
    # [5,] 5 4 3
    # [6,] 6 5 4

    也许是这样的:
    f <- function(x, dimension, pad) {
    if(!missing(pad)) {
    x <- c(rep(pad, dimension-1), x)
    }
    embed(x, dimension)
    }
    f(1:6, dimension=3, pad=NA)
    # [,1] [,2] [,3]
    # [1,] 1 NA NA
    # [2,] 2 1 NA
    # [3,] 3 2 1
    # [4,] 4 3 2
    # [5,] 5 4 3
    # [6,] 6 5 4

    关于r - 如何在时间序列中自动创建和滞后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28055927/

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