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

R语言dplyr按ID分组条件修改dataframe的Name列值

R按ID分组统一多匹配名称的实现方法

你需要的dplyr实现逻辑非常直接,按分组判断唯一值数量后批量替换即可,完整可运行代码如下:

dplyr 实现(推荐)

# 加载dplyr包
library(dplyr)

# 构造示例原始数据
df <- data.frame(
  Name = c("Tom", "Tom", "Tina", "Tom", "Tina", "Tina"),
  ID = c(1, 1, 1, 2, 3, 3)
)

# 核心处理逻辑
df_processed <- df %>%
  group_by(ID) %>%
  mutate(
    Name = if_else(
      condition = n_distinct(Name) > 1,
      true = "Both",
      false = first(Name)
    )
  ) %>%
  ungroup()

代码逻辑说明

  • group_by(ID):按ID字段对所有记录分组
  • n_distinct(Name):统计当前分组内Name字段的去重取值个数
  • 若去重后个数大于1,说明同ID下对应多个不同Name,直接将整组Name赋值为"Both"
  • 若去重后个数为1,说明同ID下Name完全一致,取组内第一个Name值即可(和保留所有原值效果完全相同)
  • ungroup():处理完成后解除数据的分组状态,避免后续分析操作受分组规则干扰

运行后得到的结果和预期输出完全一致:

NameID
Both1
Both1
Both1
Tom2
Tina3
Tina3

基础R备选实现(无需加载第三方包)

如果不想依赖dplyr,用基础R的ave()函数也可以实现相同效果:

df$Name <- ave(df$Name, df$ID, FUN = function(x) {
  if (length(unique(x)) > 1) return("Both")
  return(x[1])
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:18:25