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

如何在R中按优先级规则合并表格两列生成新列

在R中按优先级生成新列的解决方案

首先先构造你提供的示例数据框:

df <- data.frame(
  x = c(2, 1, NA, 2, 1, 2, 1),
  Y = c(1, 1, 1, NA, 2, 2, 1)
)

方法一:基础R实现

利用ifelse嵌套和rowSums函数,按优先级规则生成新列xy:

df$xy <- ifelse(
  # 判断每行是否存在1(忽略NA)
  rowSums(df == 1, na.rm = TRUE) > 0,
  1,
  # 若无1,判断是否存在2(忽略NA)
  ifelse(rowSums(df == 2, na.rm = TRUE) > 0, 2, NA)
)

方法二:tidyverse(dplyr)实现

如果你习惯用tidyverse语法,case_when函数的逻辑更直观,适合新手理解:

# 首次使用需先安装dplyr包
# install.packages("dplyr")
library(dplyr)

df <- df %>%
  mutate(xy = case_when(
    x == 1 | Y == 1 ~ 1,          # 只要x或Y是1,xy为1
    x == 2 | Y == 2 ~ 2,          # 无1但有2,xy为2
    is.na(x) & is.na(Y) ~ NA_real_# 两者都是NA,xy为NA
  ))

运行任意一种方法后,你会得到期望的结果:

print(df)
#    x  Y xy
# 1  2  1  1
# 2  1  1  1
# 3 NA  1  1
# 4  2 NA  2
# 5  1  2  1
# 6  2  2  2
# 7  1  1  1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:24:30