gpt4 book ai didi

r - 比 for 循环更快地计算行之间的差异?

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

我有一个看起来像这样的数据集:

ID   |   DATE    | SCORE
-------------------------
123 | 1/15/10 | 10
123 | 1/1/10 | 15
124 | 3/5/10 | 20
124 | 1/5/10 | 30
...

所以要将上面的代码片段作为数据框加载,代码是:
id<-c(123,123,124,124)
date<-as.Date(c('2010-01-15','2010-01-01','2010-03-05','2010-01-05'))
score<-c(10,15,20,30)
data<-data.frame(id,date,score)

我正在尝试添加一个列来计算“此 ID 的上次记录以来的天数”。

现在我正在使用一个看起来像这样的 FOR 循环:
data$dayssincelast <- rep(NA, nrow(data))
for(i in 2:nrow(data)) {
if(data$id[i] == data$id[i-1])
data$dayssincelast[i] <- data$date[i] - data$date[i-1]
}

有没有更快的方法来做到这一点? (我已经对 APPLY 进行了一些研究,但除了 FOR 循环之外,我无法找出解决方案。)

提前致谢!

最佳答案

如果您的日期在 id 内按顺序排列,这应该有效.

id<-c(123,123,124,124)
date<-as.Date(c('2010-01-15','2010-01-01','2010-03-05','2010-01-05'))
score<-c(10,15,20,30)
data<-data.frame(id,date,score)

data <- data[order(data$id,data$date),]
data$dayssincelast<-do.call(c,by(data$date,data$id,function(x) c(NA,diff(x))))
# Or, even more concisely
data$dayssincelast<-unlist(by(data$date,data$id,function(x) c(NA,diff(x))))

关于r - 比 for 循环更快地计算行之间的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13591912/

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