dplyr 滞后于列值中的 n

2024-02-12

是否可以将列值用作n in a dplyr::滞后功能?

可重现的例子:

DF <- data.frame(
    V = runif(1000, min=-100, max=100), 
    nlag = as.integer(runif(1000, min=1, max=10))
) %>% 
mutate(Vlag = lag(V, n = nlag))

我收到此错误:

错误: 评估错误:n必须是非负整数标量,而不是长度为 1000 的整数。

还有其他选择吗?

Update:

我们如何在小组内解决相同的问题?

可重现的例子:

DF <- data.frame(
    V = runif(1000, min=-100, max=100),
    nlag = as.integer(runif(1000, min=1, max=10)),
    type = sample(1:4, replace=TRUE)
) %>%
group_by(type) %>% 
mutate(Vlag = lag(V, n = nlag))

文档位于?lag says

n
长度为 1 的正整数,给出领先或落后的位置数

所以不可能给出任何大于length = 1 .

然而,我们可以生成索引来获取V值减去当前行索引与相应的nlag值,然后我们使用该索引来获取滞后值V value.

df$lag_value <- sapply(seq_along(df$nlag), function(x) {
      indx = x - df$nlag[x]
     if(indx > 0)
        df$V[indx]
     else
        NA
})
df

#          V nlag lag_value
#1  51.30453    6        NA
#2 -66.33709    4        NA
#3  95.45096    9        NA
#4  44.54434    3  51.30453
#5  62.00180    3 -66.33709
#6 -18.43012    4 -66.33709

Update

如果我们想按组进行此操作,我们可以按type列并应用相同的操作。

df$lag_value <- unlist(lapply(split(df, df$type), function(x) 
        sapply(seq_along(x$nlag), function(y) {
          indx = y - x$nlag[y]
          if(indx > 0)
            x$V[indx]
          else
             NA
})))

data

df <- head(DF)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dplyr 滞后于列值中的 n 的相关文章

随机推荐