我正在尝试使用lag
包中的dplyr
函数。但是,当我给出一个滞后> 0我希望将缺失的值替换为x
中的第一个值。我们怎样才能实现这个目标
library(dplyr)
x<-c(1,2,3,4)
z<-lag(x,2)
z
## [1] NA NA 1 2
答案 0 :(得分:5)
由于您使用的是lag
函数dplyr
,因此存在参数default
。因此,您可以指定希望x[1]
成为default
。
lag(x, 2, default=x[1])
答案 1 :(得分:3)
这是修改后的函数mylag
:
mylag <- function(x, k = 1, ...)
replace(lag(x, k, ...), seq(k), x[1])
x <- 1:4
mylag(x, k = 2)
# [1] 1 1 1 2
答案 2 :(得分:0)
我是否可以建议调整功能以使其适用于两种方式:滞后和铅(正和负滞后)。
shift = function(x, lag, fill=FALSE) {
require(dplyr)
switch(sign(lag)/2+1.5,
lead( x, n=abs(lag), default=switch(fill+1, NA, tail(x, 1)) ),
lag( x, n=abs(lag), default=switch(fill+1, NA, head(x, 1)) )
)
}
它有一个&#34;填充&#34;根据滞后的符号自动填充最后一个值的参数。
> shift(1:10, -1)
#### [1] 2 3 4 5 6 7 8 9 10 NA
> shift(1:10, +1, fill=TRUE)
#### [1] 1 1 2 3 4 5 6 7 8 9