R、 条件累积和为最大值 df

R、 条件累积和为最大值 df,r,dplyr,cumsum,R,Dplyr,Cumsum,我们根据“LATP2”的运行长度编码id创建一个分组索引,并获得“LATP”的累积和 df <- data.frame("day" = 1:20, "LATP"= c(.08,.11,.12,.09,.14,.06,.10,.11,.13,.08,.15,.08,.11,.14,.08,.11,.14,.07,.11,.12), "LATP2" = c(0,0,0,1,0,0,0,1,1,0,0,0,0,1,

我们根据“LATP2”的运行长度编码id创建一个分组索引,并获得“LATP”的累积和

df <- data.frame("day" = 1:20, 
                   "LATP"= c(.08,.11,.12,.09,.14,.06,.10,.11,.13,.08,.15,.08,.11,.14,.08,.11,.14,.07,.11,.12), 
                   "LATP2"  = c(0,0,0,1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0))
库(dplyr)
库(数据表)
df%>%
分组依据(grp=lag(rleid(LATP2),默认值=1))%>%
突变(新=累积(LATP))
#一个tibble:20x5
#组别:grp[9]
#day LATP LATP2 grp新建
#       
# 1     1  0.08     0     1  0.08
# 2     2  0.11     0     1  0.19
# 3     3  0.12     0     1  0.31
# 4     4  0.09     1     1  0.4 
# 5     5  0.14     0     2  0.14
# 6     6  0.06     0     3  0.06
# 7     7  0.1      0     3  0.16
# 8     8  0.11     1     3  0.27
# 9     9  0.13     1     4  0.13
#10    10  0.08     0     4  0.21
#11    11  0.15     0     5  0.15
#12    12  0.08     0     5  0.23
#13    13  0.11     0     5  0.34
#14    14  0.14     1     5  0.48
#15    15  0.08     0     6  0.08
#16    16  0.11     0     7  0.11
#17    17  0.14     0     7  0.25
#18    18  0.07     1     7  0.32
#19    19  0.11     0     8  0.11
#20    20  0.12     0     9  0.12

感谢您的快速回复,这与我希望做的非常接近。我希望在LATP2列中的1之后开始计算总和。我认为诀窍在于让累积和继续计数,即使可能需要从相同的LATP值计算新组。这有意义吗?@AndrewWatts你能用预期的输出列更新你的帖子,这样我就可以交叉匹配它了吗
library(dplyr)
library(data.table)
df %>%
    group_by(grp = lag(rleid(LATP2), default = 1)) %>% 
    mutate(new = cumsum(LATP))
# A tibble: 20 x 5
# Groups:   grp [9]
#     day  LATP LATP2   grp   new
#   <int> <dbl> <dbl> <dbl> <dbl>
# 1     1  0.08     0     1  0.08
# 2     2  0.11     0     1  0.19
# 3     3  0.12     0     1  0.31
# 4     4  0.09     1     1  0.4 
# 5     5  0.14     0     2  0.14
# 6     6  0.06     0     3  0.06
# 7     7  0.1      0     3  0.16
# 8     8  0.11     1     3  0.27
# 9     9  0.13     1     4  0.13
#10    10  0.08     0     4  0.21
#11    11  0.15     0     5  0.15
#12    12  0.08     0     5  0.23
#13    13  0.11     0     5  0.34
#14    14  0.14     1     5  0.48
#15    15  0.08     0     6  0.08
#16    16  0.11     0     7  0.11
#17    17  0.14     0     7  0.25
#18    18  0.07     1     7  0.32
#19    19  0.11     0     8  0.11
#20    20  0.12     0     9  0.12