R 如何指示事件前后发生的事件数
对于任何给定的行,我想知道在y事件(-)之前或y事件(+)之后,该行距离我的数据集中第一次发生y事件有多少个x事件 由于它与我的数据集有关,x事件是df$type=“ES”所在的行。y事件是df$type=“PH”首次出现的事件 我找到了一个有效的解决方案,其中我使用了case_when(),但我想知道是否有更优雅的解决方案R 如何指示事件前后发生的事件数,r,R,对于任何给定的行,我想知道在y事件(-)之前或y事件(+)之后,该行距离我的数据集中第一次发生y事件有多少个x事件 由于它与我的数据集有关,x事件是df$type=“ES”所在的行。y事件是df$type=“PH”首次出现的事件 我找到了一个有效的解决方案,其中我使用了case_when(),但我想知道是否有更优雅的解决方案 库(tidyverse) #我所拥有的 df类型在起始日期之前、起始日期之前、起始日期之前 #>1 ES-34 2019-01-01 #>2 OT-2 4 2019-01-
库(tidyverse)
#我所拥有的
df类型在起始日期之前、起始日期之前、起始日期之前
#>1 ES-34 2019-01-01
#>2 OT-2 4 2019-01-05
#>3 ES-14 2019-01-15
#>4 PH 0 4 2019-02-19
#>5 ES 1 4 2019-03-11
#>6 PH 2 4 2019-03-22
#>7 OT 3 4 2019-04-20
#>8 ES 4 2019-05-01
#非优雅解
df%>%
突变(EScumsum=cumsum(type==“ES”),
在什么情况下(
前后PH<0~as.double(x=EScumsum-(EScumsum[匹配(“PH”),类型)]+1),
bef_aft_PH==0~as.double(x=EScumsum-EScumsum),
前后PH>0~as.double(x=EScumsum-EScumsum[匹配(“PH”,.$type)])
))
#>类型bef_aft_PH rownum_at_PH date EScumsum ES_bef_aft_PH
#>1 ES-34 2019-01-01 1-2
#>2 OT-242019-01-05 1-2
#>3 ES-14 2019-01-15 2-1
#>4 PH 0 4 2019-02-19 2 0
#>5 ES 1 4 2019-03-11 3 1
#>6 PH 2 4 2019-03-22 3 1
#>7 OT 3 4 2019-04-20 3 1
#>8 ES 4 2019-05-01 4 2
在as.double()中,我没有预料到需要包装case_的所有RHS参数,所以我想知道为什么我也需要这样做。不清楚。你能解释一下前两行怎么有
ES\u bef\u aft\u PH=-2
?不清楚。你能解释一下前两行怎么有ES\u bef\u aft\u PH=-2
?
df %>%
mutate(ES_PH1cumsum = cumsum(type == "ES" | bef_aft_PH == 0)) %>%
mutate(ES_bef_aft_PH = ES_PH1cumsum - ES_PH1cumsum[match(0, .$bef_aft_PH)])
type bef_aft_PH rownum_at_PH date ES_PH1cumsum ES_bef_aft_PH
1 ES -3 4 2019-01-01 1 -2
2 OT -2 4 2019-01-05 1 -2
3 ES -1 4 2019-01-15 2 -1
4 PH 0 4 2019-02-19 3 0
5 ES 1 4 2019-03-11 4 1
6 PH 2 4 2019-03-22 4 1
7 OT 3 4 2019-04-20 4 1
8 ES 4 4 2019-05-01 5 2