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

如何在R中按指定条件合并两个数据框的性别列?

解决方案

你之前使用的unite()仅用于多列字符串拼接,不支持按规则条件取值,适合当前需求的实现方式如下:

方法1:使用dplyr的case_when()(可读性最高,推荐新手使用)

case_when()按从上到下的顺序匹配条件,满足条件即返回对应值,逻辑和你的需求完全匹配:

library(dplyr)

all_data1 <- all_data %>%
  # 先将性别列转为字符型,避免因子类型赋值时报错
  mutate(across(c(Sex.x, Sex.y), as.character),
         F_Sex = case_when(
           # 两列值相等时取对应值
           Sex.x == Sex.y ~ Sex.x,
           # Sex.x为NA时取Sex.y的有效值
           is.na(Sex.x) ~ Sex.y,
           # Sex.y为NA时取Sex.x的有效值
           is.na(Sex.y) ~ Sex.x,
           # 剩余未匹配的情况为两值不等,返回?
           TRUE ~ "?"
         ))

# 若需要删除原有的Sex.x、Sex.y列,可在管道末尾加 select(-Sex.x, -Sex.y)

如果你的列名实际为sexo.x和sexo.y,替换代码中对应的列名即可。

方法2:嵌套if_else()实现

如果你需要使用if_else()函数完成,可以用多层嵌套实现相同逻辑,可读性略低于case_when():

all_data1 <- all_data %>%
  mutate(across(c(Sex.x, Sex.y), as.character),
         F_Sex = if_else(Sex.x == Sex.y,
                         Sex.x,
                         if_else(is.na(Sex.x),
                                 Sex.y,
                                 if_else(is.na(Sex.y),
                                         Sex.x,
                                         "?"))))

内容的提问来源于stack exchange,提问作者Andrés Felipe Tigreros-Andrade

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:45:04