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

如何在R语言中根据另一列的重复值修改数据列值

R数据分组批量更新解决方案

原始数据

data <- data.frame(grupoaih = c("09081997", "13122006", "09081997", "22031969"),
                   NMM_PROC_BR = c(1, 1, 0, 1),
                   NMM_CID = c(0, 1, 1, 0),
                   CPAV_PROC_BR = c(0, 0, 0, 1),
                   CPAV_CID = c(1, 1, 0, 1))

# 输出预览
#   grupoaih NMM_PROC_BR NMM_CID CPAV_PROC_BR CPAV_CID
# 1 09081997           1       0            0        1
# 2 13122006           1       1            0        1
# 3 09081997           0       1            0        0
# 4 22031969           1       0            1        1

处理需求

  • 以grupoaih为分组依据,针对组内存在重复值的分组:
    • 对NMM_PROC_BR、NMM_CID、CPAV_PROC_BR、CPAV_CID这4个变量,若组内该变量至少有一个值为1,则将组内所有行的该变量统一设为1
    • 若组内某变量所有值均为0,则保持原数值不变

期望输出结果

data2 <- data.frame(grupoaih = c("09081997", "13122006", "09081997", "22031969"),
                   NMM_PROC_BR = c(1, 1, 1, 1),
                   NMM_CID = c(1, 1, 1, 0),
                   CPAV_PROC_BR = c(0, 0, 0, 1),
                   CPAV_CID = c(1, 1, 1, 1))

# 输出预览
#   grupoaih NMM_PROC_BR NMM_CID CPAV_PROC_BR CPAV_CID
# 1 09081997           1       1            0        1
# 2 13122006           1       1            0        1
# 3 09081997           1       1            0        1
# 4 22031969           1       0            1        1

实现代码

使用dplyr包可以简洁实现需求:

library(dplyr)

data2 <- data %>%
  group_by(grupoaih) %>%
  mutate(
    across(
      c(NMM_PROC_BR, NMM_CID, CPAV_PROC_BR, CPAV_CID),
      ~ifelse(any(.x == 1), 1, .x)
    )
  ) %>%
  ungroup()

# 查看结果
print(data2)

代码说明

  • group_by(grupoaih):按grupoaih列分组
  • across(...):批量处理指定的4个变量
  • ifelse(any(.x == 1), 1, .x):检查当前组内该变量是否存在1,存在则替换为1,否则保留原值
  • ungroup():取消分组,恢复数据框结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:10:24