我有一个数据框架—每个人都有多次访问.我想筛选出第1种病后患第2种病的病人.有时患者可以在1和2之间患有疾病3,他们也应该包括在内.在这种情况下,我会 Select ID 246.&&

ID <- c(1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6)
Visit <- c(1, 2, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 1, 2, 3)
Disease <- c(2, 2, 1, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 3, 2)
df <- data.frame(ID, Visit, Disease)

推荐答案

dplyr解决方案:

library(dplyr)

df |> 
  filter(Disease == 1 & lead(Disease) == 2, .by = ID) |> 
  pull(ID)

结果:

[1] 2 4

Edit:

扩展了原问题,使疾病序列(1,3,2)的病例也应包括在内:

df |>
  filter(Disease == 1 &
           (lead(Disease) == 2 |
              (lead(Disease) == 3 & lead(Disease, n = 2) == 2)), .by = ID) |>
  pull(ID)

结果:

[1] 2 4 6

Edit 2:

OP在 comments 中指出,每个序列(1,3,3,...,3,3,2),可以这样解决:

library(stringr)

df |>
  filter(str_detect(str_c(Disease, collapse = ""), "12|13+2$"), .by = ID) |> 
  distinct(ID)

结果:

  ID
1  2
2  4
3  6

R相关问答推荐

混淆矩阵,其中每列和等于1

更改Heatmap Annotation对象的名称

从嵌套列表中智能提取线性模型系数

R Tidymodels textercipes-使用spacyR进行标记化-如何从生成的标记列表中删除标点符号

如何计算前一行的值,直到达到标准?

警告:lmdif:info = 0. nls. lm()函数的输入参数不正确

如何在kableextra调用cell_spec()中忽略NA?

基于多列将值链接到NA

为什么舍入POSIXct会更改能力以匹配等效的POSIXct?

多个过滤器内的一个盒子在仪表板Quarto

我将工作代码重构为一个函数--现在我想不出如何传递轴列参数

解析嵌套程度极高的地理数据

数值型数据与字符混合时如何进行绑定

R中的Desolve:返回的导数数错误

替换在以前工作的代码中有x行&q;错误(geom_sf/gganimate/dow_mark)

在不重复主题的情况下重新排列组

如何在刻面和翻转堆叠条形图中对齐geom_text()

图中显示错误 colored颜色 的图例geom_sf

带有Bootswatch Cerulean主题的shiny 仪表板中的浏览&按钮可见性问题

汇总数据:在跨越()all_of()Dynamic_list_of_vars=>;所选内容不能有缺失值的汇总()中出错