gpt4 book ai didi

r - 需要 i+1 列时如何使用 cumsum-Lapply?

转载 作者:行者123 更新时间:2023-12-04 10:09:55 24 4
gpt4 key购买 nike

我目前正在处理一个相当大的文件,其中包含几个机器的停止/运行(大约 60 个)+它们在很长一段时间内(超过 60 000 行)的生产。
止损由 "-1"索引并由 "1"去:

**Date                     n1_prod   n1_stops   n2_prod   n2_stops  n3_prod     

1 2011-12-13 00:00:00 2 1 0 -1 14
2 2011-12-13 01:00:00 10 1 -10 -1 24
3 2011-12-13 02:00:00 24 1 -5 -1 23
4 2011-12-13 03:00:00 25 1 0 -1 22
5 2011-12-13 04:00:00 23 1 12 1 13
6 2011-12-13 05:00:00 0 -1 11 1 17
7 2011-12-13 06:00:00 -2 -1 21 1 18

我的目的是为每个设备获取每次停止/运行的新列累积产量(可能在新的 df 上)。例如,对于设备 n°1,它将是:
**Date                     n1_prod   n1_stops   n1_agprod   
1 2011-12-13 00:00:00 2 1 2
2 2011-12-13 01:00:00 10 1 12
3 2011-12-13 02:00:00 24 1 36
4 2011-12-13 03:00:00 25 1 61
5 2011-12-13 04:00:00 23 1 84
6 2011-12-13 05:00:00 0 -1 0
7 2011-12-13 06:00:00 -2 -1 -2

对于一列,我可以使用以下方法获得所需的结果:
df<-as_tibble(df)%>%
group_by(n1_stops) %>%
dplyr::mutate(n1_agprod= cumsum(n1_prod))

但我不知道如何概括它,因为我每次都需要一个不同的列作为组,而且我目前无法用列索引替换列的名称......

你知道我怎么办吗?

最佳答案

您可以根据每个列名的前缀进行拆分并应用 cumsum在那里,即

sapply(split.default(df[-1], sub('_.*','',names(df[-1]))), 
function(i) ave(i[[1]], i[[2]], FUN = cumsum))
# n1 n2
#[1,] 2 0
#[2,] 12 -10
#[3,] 36 -15
#[4,] 61 -15
#[5,] 84 12
#[6,] 0 23
#[7,] -2 44

关于r - 需要 i+1 列时如何使用 cumsum-Lapply?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55952477/

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