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

如何基于另一列条件重新编码R语言数据框中的列

R语言修正重复姓名的Female列值方法

需求说明

针对包含Name和Female列的数据框,若某姓名对应的Female列至少有一个1,则该姓名所有行的Female列统一设为1;无1的姓名保留原有NA值。

示例数据

Name <- c("Claire Smith", "John Doe", "Serena Williams", "Claire Smith", "Claire Smith", "Serena Williams")
Female <- c(1, NA, NA, NA, NA, 1)
df <- data.frame(Name, Female)

方法一:Base R 实现

利用ave()函数按姓名分组,判断每组是否存在1后替换对应值:

df$Female <- ave(df$Female, df$Name, FUN = function(x) {
  if (any(x == 1, na.rm = TRUE)) 1 else x
})
  • 逻辑:any(x == 1, na.rm = TRUE)忽略NA检查分组内是否有1,若存在则整组替换为1,否则保留原值。

方法二:dplyr(tidyverse)实现

通过分组+突变操作完成批量修正:

library(dplyr)

df <- df %>%
  group_by(Name) %>%
  mutate(Female = ifelse(any(Female == 1, na.rm = TRUE), 1, Female)) %>%
  ungroup()
  • 逻辑:按姓名分组后,对每组统一判断并修改Female列值。

方法三:data.table 实现(适合大数据集)

处理大型数据时,data.table的操作效率更高:

library(data.table)

setDT(df)[, Female := if (any(Female == 1, na.rm = TRUE)) 1 else Female, by = Name]
  • 逻辑:转换为data.table格式后,按姓名分组批量更新Female列。

验证结果

运行任意方法后,数据框将变为:

#             Name Female
# 1    Claire Smith      1
# 2        John Doe     NA
# 3 Serena Williams      1
# 4    Claire Smith      1
# 5    Claire Smith      1
# 6 Serena Williams      1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:51:11