是否可以将列值用作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(使用前将#替换为@)