gpt4 book ai didi

r - 具有重复索引的向量化循环

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

我有一个包含重复值的索引向量:

 IN <- c(1, 1, 2, 2, 3, 4, 5)     

我想使用这些索引来减去两个向量:

ST <- c(0, 0, 0, 0, 0, 0, 0)
SB <- c(1, 1, 1, 1, 1, 1, 1)

但是,我想按“顺序”进行减法,以便在减去第一个索引值 (0, 1) 之后,第二个减法将“建立”第一个减法。我希望得到一个如下所示的向量 FN:

c(-2, -2, -1, -1, -1, 0, 0)

这在 for 循环中很容易做到:

for(i in seq_along(IN)){
ST[IN[i]] <- ST[IN[i]] - SB[IN[i]]
}

但是我需要在长向量上多次运行这个循环,这可能需要很多小时。有什么方法可以矢量化此任务并避免 for 循环吗?也许使用 data.table 技术?

最佳答案

当然,有了 data.table,它就是

library(data.table)
DT = data.table(ST)
mDT = data.table(IN, SB)[, .(sub = sum(SB)), by=.(w = IN)]
DT[mDT$w, ST := ST - mDT$sub ]

ST
1: -2
2: -2
3: -1
4: -1
5: -1
6: 0
7: 0

或以 R 为基数:

w = sort(unique(IN))
ST[w] <- ST[w] - tapply(SB, IN, FUN = sum)
# [1] -2 -2 -1 -1 -1 0 0

关于r - 具有重复索引的向量化循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44531683/

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