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

如何批量将存在矛盾吸烟状态的重复ID对应的状态值转为NA?

批量修正矛盾的吸烟状态数据

方法一:用dplyr包处理

这是tidyverse生态下的常用方法,代码简洁易读:

library(dplyr)

# 按ID分组,判断每组是否存在矛盾状态,有则设为NA
test_cleaned <- test %>%
  group_by(ID) %>%
  mutate(Smoking.Status = ifelse(n_distinct(Smoking.Status, na.rm = TRUE) > 1, NA, Smoking.Status)) %>%
  ungroup()

逻辑说明:

  • group_by(ID):按用户ID分组
  • n_distinct(Smoking.Status, na.rm = TRUE):统计每组内非NA的吸烟状态种类数
  • 如果种类数大于1,说明该用户的状态存在矛盾,将所有状态值替换为NA;否则保留原状态

方法二:用Base R原生函数处理

不想加载额外包的话,用ave函数就能实现相同效果:

# 按ID分组处理状态
test$Smoking.Status <- ave(test$Smoking.Status, test$ID, 
                          FUN = function(x) {
                            # 统计每组非NA的唯一状态数,大于1则设为NA
                            if (length(unique(na.omit(x))) > 1) NA else x
                          })

用你提供的测试数据验证,处理后ID为123的两条记录的Smoking.Status都会被替换成NA,批量处理所有矛盾ID也完全适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:54:55