在另一个 ID 中通过指示变量创建 ID 并在 R 中计算滚动总和

Creating ID by indicator variable within another ID and calculating rolling sum in R

我有一个数据集,其中包含患者 ID、一个“新”或“相同”的“情节”因子变量,以及一个持续时间变量。数据按 ID 分组并按日期变量(日期不在示例数据集中)排序,这样“剧集”变量代表该特定患者的“新”剧集,或者代表与排在它上面。我想创建两种不同类型的其他 ID 以及滚动总和。 'ID_2' 将是患者体内发作的 ID(即在每个“ID”内)。 'ID_3' 将是整个数据集中每一集的唯一 ID。 “总和”变量将是每个唯一剧集中每一行的总数 'duration' 的滚动总和。

这段代码创建了我拥有的示例数据集:

ID <- c(1,2,3,3,3,3,3,3,3,4,4,5,6)
episode <- c("new","new","new","same","new","same","same","new","same","new","same","new","new")
duration <- c(10,13,11,2,45,66,2,4,45,33,23,12,16)
data1 <- cbind(ID,episode,duration)
data1 <- data.frame(data1)
data1$ID <- factor(data1$ID)
data1$episode <- factor(data1$episode)

这段代码创建了我希望输出的样子:

ID <- c(1,2,3,3,3,3,3,3,3,4,4,5,6)
episode <- c("new","new","new","same","new","same","same","new","same","new","same","new","new")
duration <- c(10,13,11,2,45,66,2,4,45,33,23,12,16)
ID_2 <- c(1,1,1,1,2,2,2,3,3,1,1,1,1)
ID_3 <- c(1,2,3,3,4,4,4,5,5,6,6,7,8)
sum_roll <- c(10,13,11,13,45,111,113,4,49,33,56,12,16)
data2 <- cbind(ID,episode,duration,ID_2,ID_3,sum_roll)
data2 <- data.frame(data2)
data2$ID <- factor(data2$ID)
data2$episode <- factor(data2$episode)
data2$ID_2 <- factor(data2$ID_2)
data2$ID_3 <- factor(data2$ID_3)

我看过这个 ,它使用滑块求和,但我无法弄清楚如何将指示变量 episode 与 ID 结合使用来实现它。我还查看了使用 rleid() 但这似乎不是解决方案,因为我正在尝试根据 ID 和情节中的信息创建新 ID。

非常感谢您的帮助!这对我来说似乎是一个非常困难的问题。

使用 cumsum 可能是您最好的选择:

library(tidyverse)

data1 %>% 
    group_by(ID) %>%
    mutate(`ID_2` = cumsum(episode == 'new')) %>%
    ungroup() %>%
    mutate(`ID_3` = cumsum(episode == 'new')) %>% 
    group_by(`ID_3`) %>% 
    mutate(sum_roll = cumsum(duration)) %>%
    ungroup()