在R中以滚动方式复制向量

在R中以滚动方式复制向量,r,vector,regression,rolling-computation,R,Vector,Regression,Rolling Computation,假设我想运行一个回归,其中DV的数据输入应该以滚动方式进行。为了简化这个过程,我首先要“复制”这个向量,从而相应地滚动观察值。例如,请参见下面的数据结构 # libraries # library(dplyr) # reproducible data # df1 <- tibble(ID = as.factor(rep(c(1, 2), each = 40)), YEAR = rep(rep(c(2001:2010), each = 4), 2),

假设我想运行一个回归,其中DV的数据输入应该以滚动方式进行。为了简化这个过程,我首先要“复制”这个向量,从而相应地滚动观察值。例如,请参见下面的数据结构

# libraries #
library(dplyr)

# reproducible data # 
df1 <- tibble(ID = as.factor(rep(c(1, 2), each = 40)),
              YEAR = rep(rep(c(2001:2010), each = 4), 2),
              QTR = rep(c(1:4), 20),
              DV = rnorm(80))

df2 <- tibble(ID = as.factor(rep(c(1, 2), each = 120)),
              YEAR = rep(rep(c(2005:2010), each = 20), 2),
              IV = rnorm(240))
#库#
图书馆(dplyr)
#可再现数据
df1我们可以使用

v1 <- c(1, seq(5, nrow(df1), by = 4))
v2 <- seq(20, nrow(df1), by = 4)
i1 <- seq_len(min(c(length(v1), length(v2))))
lst1 <- map2(v1[i1], v2[i1], ~ df1 %>% 
                           slice(.x:.y))

@Oscar是固定的,带有
i1
(检查第三行)
v11 <- seq(1, nrow(df2), by = 20)
v22 <- seq(20, nrow(df2), by = 20)
i2 <- seq_len(min(c(length(v11), length(v22))))
lst2 <- map2(v11[i2], v22[i2], ~ df2 %>% 
                           slice(.x:.y))
df1 %>%
    group_split(ID) %>% 
    map(~ {
      v1 <- c(1, seq(5, nrow(.x), by = 4))
      v2 <- seq(20, nrow(.), by = 4)
      i1 <- seq_len(min(c(length(v1), length(v2))))
      map2(v1[i1], v2[i1], function(x, y) .x %>%
           slice(x:y))
   })