gpt4 book ai didi

r - 我如何滞后一个 data.frame?

转载 作者:行者123 更新时间:2023-12-03 22:00:30 25 4
gpt4 key购买 nike

我想在 R 中滞后整个数据帧。

在 python 中,使用 shift() 很容易做到这一点。功能
(例如:df.shift(1))

但是,我找不到像 pandas 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

有什么好主意吗?

最佳答案

在基础 R 中非常简单:

rbind(NA, head(x, -1))
a b
1 NA NA
2 1 4
3 2 5
head用 -1 删除最后一行和 rbind以 NA 作为第一个参数添加一行 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

关于r - 我如何滞后一个 data.frame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45717465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com