You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中高效实现同ID内出现1后后续Value全部置1?

在R中实现分组后将首次出现1后的所有Value设为1(无循环)

示例输入

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

需求说明

按ID分组,当某一行的Value首次变为1后,将该ID下后续所有行的Value都设为1,且避免使用低效的for循环。

解决方案

这里提供两种高效的向量式操作方案,无需循环:

方法1:使用dplyr包

利用cummax()(累计最大值)函数,一旦分组内出现1,后续的累计最大值都会保持为1,完美匹配需求:

library(dplyr)

df_result <- df %>%
  group_by(ID) %>%
  mutate(Value = cummax(Value)) %>%
  ungroup()

方法2:使用data.table包(适合大数据集)

data.table的分组操作效率极高,语法更简洁:

library(data.table)

setDT(df)
df_result <- df[, Value := cummax(Value), by = ID]

验证结果

运行上述代码后,得到的df_result与期望输出完全一致:

data.frame(ID = c(1,1,1,1,1,2,2,2,2,2,2,3,3,3), 
           Visit = c(1,2,3,4,5,1,2,3,4,5,6,1,2,3), 
           Value = c(0,0,1,1,1,0,0,0,0,1,1,0,1,1))

内容的提问来源于stack exchange,提问作者Y. Z.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:06:22