我有一个数据框架-每个人都有多次访问.我想找出那些在第一次诊断后疾病消失的患者.疾病:1=有疾病,0=无疾病.

如何创建一个新的变量"Back_to_normal"=(0,0,1,1,1,0,0,1,1,1)?

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(1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0)
df <- data.frame(ID, Visit, Disease)

推荐答案

这段代码将首先标识ID(到那时为止)至少有一个Disease == 1,但当前Disease == 0的行.这必然反映了一个观察结果,即在这一点上ID已经从先前的疾病中恢复.然后它只提取唯一ID,因 for each ID只需要一次这样的恢复.

library(dplyr)
df |>
  # arrange(visit)  # in case data is not necessarily sorted chronologically
  filter(cumsum(Disease) >= 1, Disease == 0, .by = ID) |>
  distinct(ID)

  ID
1  2
2  4
3  6

为了创建一个新的变量"Back_to_normal",将1分配给疾病消失的患者,将0分配给没有消失的患者(注释中的每个问题),您可以将代码的输出分配给-> recovered_IDs以上.然后运行

df |>
  mutate(Back_to_normal = 1*(ID %in% recovered_IDs$ID))

更优雅的,正如你的 comments 所建议的:

df |>
  mutate(Back_to_normal = ifelse(any(cumsum(Disease) >= 1 & Disease == 0),1,0), 
         .by = ID)

R相关问答推荐

使用na.locf在长格式数据集中输入具有多个时间点的数据集

保存shiny 的代码嗅探器:避免$ Symbol问题

使用R中的gt对R中的html rmarkdown文件进行条件格式设置表的单元格

如何使用stat_extract_all正确提取我的目标值?

S用事件解决物质平衡问题

计算时间段的ECDF(R)

非线性混合效应模型(NLME)预测变量的置信区间

多个模拟序列间的一种预测回归关系

从多个线性回归模型中提取系数

根据1个变量绘制 colored颜色 发散的 map ,由另一个变量绘制饱和度,ggplot2不工作

如何在R中通过多个变量创建交叉表?

更新R中的数据表(使用data.table)

将具有坐标列表列的三角形转换为多个多边形

按组跨多列创建伪变量

随机 Select 的非NA列的行均数

R try Catch in the loop-跳过缺少的值并创建一个DF,显示跳过的内容

如何使投篮在R中保持一致

我已经运行了几个月的代码的`Palette()`中出现了新的gglot错误

从矩阵创建系数图

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