gpt4 book ai didi

r - 从末尾到开头计算 cumsum

转载 作者:行者123 更新时间:2023-12-02 07:57:43 24 4
gpt4 key购买 nike

我正在尝试计算每组从最后一行到第一行的cumsum

示例数据:

t1 <- data.frame(var = "a", val = c(0,0,0,0,1,0,0,0,0,1,0,0,0,0,0))
t2 <- data.frame(var = "b", val = c(0,0,0,0,1,0,0,1,0,0,0,0,0,0,0))
ts <- rbind(t1, t2)

所需格式(按 var 分组):

ts <- data.frame(var = c("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a",
"b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b"),
val = c(2,2,2,2,2,1,1,1,1,1,0,0,0,0,0,2,2,2,2,2,1,1,1,0,0,0,0,0,0,0))

最佳答案

将我的评论提升为答案;使用:

ts$val2 <- ave(ts$val, ts$var, FUN = function(x) rev(cumsum(rev(x))))

给出:

> ts
var val val2
1 a 0 2
2 a 0 2
3 a 0 2
4 a 0 2
5 a 1 2
6 a 0 1
7 a 0 1
8 a 0 1
9 a 0 1
10 a 1 1
11 a 0 0
12 a 0 0
13 a 0 0
14 a 0 0
15 a 0 0
16 b 0 2
17 b 0 2
18 b 0 2
19 b 0 2
20 b 1 2
21 b 0 1
22 b 0 1
23 b 1 1
24 b 0 0
25 b 0 0
26 b 0 0
27 b 0 0
28 b 0 0
29 b 0 0
30 b 0 0

或者使用dplyrdata.table:

library(dplyr)
ts %>%
group_by(var) %>%
mutate(val2 = rev(cumsum(rev(val))))

library(data.table)
setDT(ts)[, val2 := rev(cumsum(rev(val))), by = var]

关于r - 从末尾到开头计算 cumsum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50413415/

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