gpt4 book ai didi

r - 如何优雅地计算 R data.frame 中使用前一行中的值的变量?

转载 作者:行者123 更新时间:2023-12-04 00:29:24 25 4
gpt4 key购买 nike

这是我构建的一个简单场景:

假设我有以下内容:

set.seed(1)
id<-sample(3,10,replace = TRUE)
n<-1:10
x<-round(runif(10,30,40))
df<-data.frame(id,n,x)
df
id n x
1 1 1 32
2 2 2 32
3 2 3 37
4 3 4 34
5 1 5 38
6 3 6 35
7 3 7 37
8 2 8 40
9 2 9 34
10 1 10 38

如何优雅地计算 x.lag,其中 x.lag 是同一 id 的前一个 x,如果前一个值不存在,则为 0。

这就是我所做的,但我对此不满意:

df$x.lag<-rep(0,10)
for (id in 1:3)
df[df$id==id,]$x.lag<-c(0,df[df$id==id,]$x)[1:sum(df$id==id)]
df
id n x x.lag
1 1 1 32 0
2 2 2 32 0
3 2 3 37 32
4 3 4 34 0
5 1 5 38 32
6 3 6 35 34
7 3 7 37 35
8 2 8 40 37
9 2 9 34 40
10 1 10 38 38

最佳答案

我们可以使用data.table

library(data.table)
setDT(df)[, x.lag := shift(x, fill=0), id]

或者使用dplyr

library(dplyr)
df %>%
group_by(id) %>%
mutate(x.lag = lag(x, default = 0))

或者使用base R中的ave

df$x.lag <- with(df, ave(x, id, FUN = function(x) c(0, x[-length(x)])))
df$x.lag
#[1] 0 0 32 0 32 34 35 37 40 38

关于r - 如何优雅地计算 R data.frame 中使用前一行中的值的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43773264/

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