gpt4 book ai didi

R (dplyr) : count number of "0" observations before "1" in a column by ID

转载 作者:行者123 更新时间:2023-12-01 11:15:52 25 4
gpt4 key购买 nike

我有一个包含两个变量的数据集:IDrepeatvisittimeperiodID 代表访问诊所的个人,而 referredvisit 代表该观察是否已被推荐为转诊。换句话说,referredvisit == 0 表示个人未被转诊到另一家诊所,而 referredvisit == 1 表示推荐转诊的患者。 timeperiod 显示个体进来的顺序。

我的数据集是这样的:

timeperiod <- 1:18
ID <- c("TOM", "TOM", "SALLY", "SALLY", "RICHIE", "TOM", "TOM", "SALLY", "RICHIE", "RICHIE", "RICHIE", "SALLY", "TOM", "TOM", "TOM", "RICHIE", "RICHIE", "RICHIE")
referredvisit <- c(0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0)
df <- cbind(timeperiod, ID, referredvisit)
df <- as.data.frame(df)

我的目标是对每个 referredvisit == 0,我想计算它前面有多少行 “1”,直到它到达列的开头(对于第一个 0)或直到它按 ID 命中另一个 0(对于其余的 0)。我想创建一个存储此计数的列。我的数据集结果应如下所示:

df$result <- c(0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 1, 0, 2, 0)

我实际上是在尝试关注这个 link ,但它似乎无法正常工作,因为链接假定 ID 已很好地整理出来。我在想也许 dplyr 可能会有所帮助,但似乎也无法弄清楚。如果有人能帮助我,我将不胜感激!

提前致谢!

编辑:为了更好的可视化,结果将如下所示。但这只是在我手动按 ID 排序之后。因为我的原始数据集会包含几千行,我很难手动对ID进行排序。
enter image description here

最佳答案

零的位置差减 1 给出前面的个数,count_ones 对单个 ID 执行该计算,其中它的参数假定为在零位置为 TRUE 的逻辑向量。 ave 然后用于将其应用于每个 ID。没有使用包。

count_ones <- function(is0) replace(is0, is0, diff(which(c(TRUE, is0))) - 1)    
transform(df, result = ave(referredvisit == 0, ID, FUN = count_ones))

给予:

   timeperiod     ID referredvisit result
1 1 TOM 0 0
2 2 TOM 1 0
3 3 SALLY 1 0
4 4 SALLY 1 0
5 5 RICHIE 0 0
6 6 TOM 1 0
7 7 TOM 0 2
8 8 SALLY 1 0
9 9 RICHIE 0 0
10 10 RICHIE 0 0
11 11 RICHIE 1 0
12 12 SALLY 0 3
13 13 TOM 0 0
14 14 TOM 1 0
15 15 TOM 0 1
16 16 RICHIE 1 0
17 17 RICHIE 0 2
18 18 RICHIE 0 0

关于R (dplyr) : count number of "0" observations before "1" in a column by ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51413515/

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