如何滞后data.frame?
问题描述:
我想滞后整个数据帧中R.如何滞后data.frame?
在Python中,这是很容易做到这一点,利用shift()
功能 (例如:df.shift(1)
)
但是,我找不到任何一个易于和简单的方法在大熊猫shift()
在R.
我该怎么做?
> 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
我要的是,
> lag(x,1)
>
a b
1 NA NA
2 1 4
3 2 5
什么好主意?
答
library(dplyr)
x %>% mutate_all(lag)
a b
1 NA NA
2 1 4
3 2 5
答
在
基础R相当简单:
rbind(NA, head(x, -1))
a b
1 NA NA
2 1 4
3 2 5
head
与作为第一个参数的NA增加一排-1滴最终行和rbind
与NA。
您还可以使用行索引[
,这样
x[c(NA, 1:(nrow(x)-1)),]
a b
NA NA NA
1 1 4
2 2 5
这留下的NA在第一个变量的行名称,以“修好”这一点,你可以剥除data.frame类,然后将其重新分配:
data.frame(unclass(x[c(NA, 1:(nrow(x)-1)),]))
a b
1 NA NA
2 1 4
3 2 5
在这里,你可以使用rep
产生期望的滞后
data.frame(unclass(x[c(rep(NA, 2), 1:(nrow(x)-2)),]))
a b
1 NA NA
2 NA NA
3 1 4
,甚至把这个变成一个功能
myLag <- function(dat, lag) data.frame(unclass(dat[c(rep(NA, lag), 1:(nrow(dat)-lag)),]))
试试看
myLag(x, 2)
a b
1 NA NA
2 NA NA
3 1 4
+0
非常感谢您的好评 –
你真的需要''上lag' funs'? – PoGibas
不,你说得很对。我会解决这个问题。 – Lyngbakr
如果OP是R的新手,可能会更容易理解:'dplyr :: mutate_all(x,lag)' – PoGibas