所以我有不同的访客,每个访客都来过不止一次。
从就诊日期开始,我得到了每个患者的就诊差距。
我想根据他们的差距为每位患者的每次就诊分配情节。对于Gap=0
(即任何新患者的第一次就诊),Episode=1
。如果为Gap>20
,则为Episode=previous episode+1
;如果为Gap<=20
,则为Episode=previous Episode
。对于新患者,整个事情再次开始。我想在不使用R的情况下执行此操作,最好在dplyr中使用。
数据:
Df <- data.frame(Visitors = c("V1","V1","V1","V1","V1","V1","V1","V2","V2","V2","V2","V2","V2","V3"),
Gap=c(0,6,18,35,43,9,11,0,3,67,98,12,2,0))
这是预期的表:
Visitors Gap Episodes
V1 0 1
V1 6 1
V1 18 1
V1 35 2
V1 43 3
V1 9 3
V1 11 3
V2 0 1
V2 3 1
V2 67 2
V2 98 3
V2 12 3
V2 2 3
V3 0 1
答案 0 :(得分:0)
这是dplyr解决方案。在按访问者将向量Df分成几组之后,它会累计计算出大于20的缺口。
require(dplyr)
Df %>% group_by(Visitors) %>% mutate(episode=cumsum(Gap>20)+1)
# A tibble: 14 x 3
# Groups: Visitors [3]
Visitors Gap episode
<fct> <dbl> <dbl>
1 V1 0 1
2 V1 6 1
3 V1 18 1
4 V1 35 2
5 V1 43 3
6 V1 9 3
7 V1 11 3
8 V2 0 1
9 V2 3 1
10 V2 67 2
11 V2 98 3
12 V2 12 3
13 V2 2 3
14 V3 0 1
这是执行相同操作的基本R解决方案:
Df$ep<-unlist(sapply(split(Df, Df$Visitors),function(x) cumsum(x[,"Gap"]>20)+1))