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

如何根据id列的重复数字与字符条件将statut列设为NA?

解决方法:根据ID数字部分重复情况修改statut列值

首先是你的示例数据:

df = data.frame(id = c('1E','1F','2E','2F','3F','4F'),
                statut = c('A','A','B','B','A','A') )

需求明确:找出数字部分重复的ID,当这类ID的字母为E时,将对应statut设为NA。

方法一:使用tidyverse工具链

需要用到dplyr做数据处理,stringr处理字符串:

library(dplyr)
library(stringr)

df_processed <- df %>%
  # 提取ID里的数字部分作为临时分组依据
  mutate(num_part = str_extract(id, "\\d+"),
         # 分组判断:同一数字组内有多个ID,且当前ID含E时,statut设为NA
         statut = ifelse(n() > 1 & str_detect(id, "E"), NA, statut),
         .by = num_part) %>%
  # 移除临时生成的num_part列
  select(-num_part)

方法二:使用Base R实现

不用额外加载包,直接用基础函数处理:

# 提取每个ID的数字部分
num_part <- gsub("[A-Z]", "", df$id)
# 统计每个数字部分的出现次数
num_counts <- table(num_part)
# 筛选出出现次数大于1的数字部分
repeat_numbers <- names(num_counts[num_counts > 1])
# 定位到数字重复且字母为E的行,将statut设为NA
df$statut[df$id %in% paste0(repeat_numbers, "E")] <- NA

两种方法都能得到你想要的结果:

df_processed  # 或者直接查看修改后的df
#>   id statut
#> 1 1E   <NA>
#> 2 1F      A
#> 3 2E   <NA>
#> 4 2F      B
#> 5 3F      A
#> 6 4F      A

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:04:59