Woo*_*Lee 4 r shift lag dataframe
我想在 R 中滞后整个数据帧。
在Python中,这是很容易做到这一点,利用shift()功能(例如:df.shift(1))
但是,我找不到像shift()R中的 Pandas那样简单易行的方法。
我怎样才能做到这一点?
> x = data.frame(a=c(1,2,3),b=c(4,5,6))
> x
a b
1 1 4
2 2 5
3 3 6
Run Code Online (Sandbox Code Playgroud)
我想要的是,
> lag(x,1)
>
a b
1 NA NA
2 1 4
3 2 5
Run Code Online (Sandbox Code Playgroud)
有什么好主意吗?
在基础 R 中非常简单:
rbind(NA, head(x, -1))
a b
1 NA NA
2 1 4
3 2 5
Run Code Online (Sandbox Code Playgroud)
head使用 -1 删除最后一行,rbind使用 NA 作为第一个参数添加一行 NA。
您还可以使用行索引[,像这样
x[c(NA, 1:(nrow(x)-1)),]
a b
NA NA NA
1 1 4
2 2 5
Run Code Online (Sandbox Code Playgroud)
这会在第一个变量的行名中留下一个 NA,为了“修复”这个,你可以剥离 data.frame 类,然后重新分配它:
data.frame(unclass(x[c(NA, 1:(nrow(x)-1)),]))
a b
1 NA NA
2 1 4
3 2 5
Run Code Online (Sandbox Code Playgroud)
在这里,您可以使用rep产生所需的滞后
data.frame(unclass(x[c(rep(NA, 2), 1:(nrow(x)-2)),]))
a b
1 NA NA
2 NA NA
3 1 4
Run Code Online (Sandbox Code Playgroud)
甚至把它放到一个函数中
myLag <- function(dat, lag) data.frame(unclass(dat[c(rep(NA, lag), 1:(nrow(dat)-lag)),]))
Run Code Online (Sandbox Code Playgroud)
试一试
myLag(x, 2)
a b
1 NA NA
2 NA NA
3 1 4
Run Code Online (Sandbox Code Playgroud)