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

R语言data.frame按ID分组填充W标记区间的code值

R实现:按ID分组填充区间内的W标记

核心逻辑:在每个ID分组内,累计统计W的出现次数,累计次数为奇数的行区间就是需要填充W的范围(第一个W出现后累计数为1<奇数>,到第二个W出现累计数为2<偶数>,中间所有行都属于两个W的闭区间,完全匹配填充需求)。

可运行实现代码

方法1:base R(无额外包依赖)

df$code <- ave(
  df$code,
  df$ID,
  FUN = function(x) {
    # 定位分组内所有W的位置
    is_w <- !is.na(x) & x == "W"
    # 标记需要填充的区间:累计W次数为奇数的范围
    fill_flag <- cumsum(is_w) %% 2 == 1
    ifelse(fill_flag, "W", x)
  }
)

方法2:tidyverse/dplyr 实现(兼容常规数据分析流程)

library(dplyr)
library(tidyr)

df <- df %>%
  group_by(ID) %>%
  mutate(
    is_w = code == "W",
    fill_flag = cumsum(replace_na(is_w, FALSE)) %% 2 == 1,
    code = ifelse(fill_flag, "W", code)
  ) %>%
  ungroup() %>%
  select(-is_w, -fill_flag)

方法3:data.table 实现(适合大数据量场景)

library(data.table)

setDT(df)
df[, 
   code := ifelse(cumsum((!is.na(code) & code == "W")) %% 2 == 1, "W", code),
   by = ID
]

结果验证

运行任意一种方法后,输出结果和预期填充效果完全一致,无需手动调整。

内容的提问来源于stack exchange,提问作者shiny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 09:54:05