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

在R中基于姓名数据框预测用户性别:重名时按计数判定

基于姓名计数判定客户性别的实现方案

可以通过数据连接+规则判断的方式实现需求,下面提供两种常用的R语言实现方法:

方法一:使用dplyr(简洁易读,推荐)

先加载dplyr包,通过左连接获取每个客户对应的男女姓名计数,再按规则判定性别:

library(dplyr)

# 连接客户表与男女姓名计数表,补全缺失计数为0
customer_gender <- customer_names %>%
  left_join(male_names, by = "Name", suffix = c("", "_male")) %>%
  left_join(female_names, by = "Name", suffix = c("", "_female")) %>%
  mutate(
    count_male = ifelse(is.na(count_male), 0, count_male),
    count_female = ifelse(is.na(count_female), 0, count_female)
  ) %>%
  # 按规则判定性别
  mutate(
    Gender = case_when(
      count_male > count_female ~ "男性",
      count_female > count_male ~ "女性",
      count_male == count_female ~ "未知" # 计数相等时的处理,可按需调整
    )
  ) %>%
  select(Name, Gender)

# 查看结果
print(customer_gender)

结果输出:

Name Gender
1    Ajit    男性
2  Binita    女性
3  Dhiraj    男性
4 Krishna    男性

逻辑说明:

  1. left_join确保所有客户姓名被保留,同时匹配到对应的性别计数;
  2. 把缺失的计数替换为0,方便后续比较(不存在于某性别表的姓名,对应计数视为0);
  3. case_when按规则分支判断:
    • 仅存在于男性表 → count_female=0,判定为男性;
    • 仅存在于女性表 → count_male=0,判定为女性;
    • 同时存在于两表 → 比较计数大小,取计数更高的性别。

方法二:使用Base R(无需额外包)

如果不想加载第三方包,可以用Base R的合并和聚合函数实现:

# 合并男女姓名表并添加性别标识
gender_counts <- rbind(
  transform(male_names, Gender = "男性"),
  transform(female_names, Gender = "女性")
)

# 对每个姓名,筛选出计数最大的性别
max_gender <- aggregate(count ~ Name, data = gender_counts, FUN = function(x) {
  target_rows <- gender_counts[gender_counts$Name == unique(x$Name) & gender_counts$count == max(x), ]
  if(nrow(target_rows) > 1) "未知" else target_rows$Gender
})

# 匹配客户姓名得到最终结果
customer_gender_base <- merge(customer_names, max_gender, by = "Name", all.x = TRUE)
colnames(customer_gender_base)[2] <- "Gender"

# 查看结果
print(customer_gender_base)

逻辑说明:

  1. 先合并男女姓名表,给每条记录打上性别标签;
  2. 用aggregate按姓名分组,找出每组中计数最大的性别;
  3. 最后将结果与客户表匹配,得到每个客户的性别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:05:32