R、 条件累积和为最大值 df
我们根据“LATP2”的运行长度编码id创建一个分组索引,并获得“LATP”的累积和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,
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