gpt4 book ai didi

r - 如何向量化一个 "for"循环,该循环在为每个 ID 应用一个函数后返回一个向量

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

我有兴趣找到一种方法来矢量化(使用 ddply 或其他一些应用函数)以下内容:

day = seq(0,100,20)
d = data.frame(id=rep(seq(1:10),each=length(day)))
d$s = rnorm(nrow(d),0,1)
d$diffS = NA
for(i in unique(d$id)) {
d$diffS[d$id==i] = c(0,diff(d$s[d$id==i]))
}

本质上,我正在寻找一种更聪明的方法来通过 ID 获取数据帧的子集,应用一个返回向量的函数并将其添加回数据帧。我想也许“by”函数会起作用,但我想不通。

最佳答案

您可以尝试其中之一 aggregating职能

d$diffS <- with(d, ave(s, id, FUN=function(x) c(0, diff(x))))

或者
library(dplyr)
d %>%
group_by(id) %>%
mutate(diffS= c(0, diff(s)))

或者
library(data.table)#v1.9.5+
setDT(d)[, diffS:= c(0, diff(s)), by = id]

正如@Arun 在评论中提到的,'data.table' 的开发版本有 shift这会更有效率。安装devel版本的说明是 here
setDT(d)[, diffS := s-shift(s, fill=0), by = id]

关于r - 如何向量化一个 "for"循环,该循环在为每个 ID 应用一个函数后返回一个向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30716830/

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