修改dplyr :: lag函数

时间:2015-02-18 08:35:43

标签: r dplyr lag

我正在尝试使用lag包中的dplyr函数。但是,当我给出一个滞后> 0我希望将缺失的值替换为x中的第一个值。我们怎样才能实现这个目标

library(dplyr)
x<-c(1,2,3,4)
z<-lag(x,2)
z
## [1] NA NA  1  2

3 个答案:

答案 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