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

如何在R语言中合并两列信息新增一列?

给DataFrame新增规则匹配列的实现方法

原始数据

Dat <- c("B", "A", "A", "B", "B")
Nat <- c("B", "B", "A", "B", "A")

df <- data.frame(Nat, Dat)

需求说明

根据Nat和Dat的取值组合,新增res列,规则如下:

  • 当Nat和Dat均为B时,取值为"Both are B"
  • 当Nat和Dat均为A时,取值为"Both are A"
  • 仅Dat为A时,取值为"Only Dat is A"
  • 仅Nat为A时,取值为"Only Nat is A"

实现方法

方法1:Base R 嵌套ifelse

直接通过嵌套条件判断生成目标列,无需额外包:

df$res <- ifelse(df$Nat == "B" & df$Dat == "B", "Both are B",
                 ifelse(df$Nat == "A" & df$Dat == "A", "Both are A",
                        ifelse(df$Dat == "A", "Only Dat is A", "Only Nat is A")))

方法2:dplyr包case_when(可读性更强)

适合多规则场景,逻辑清晰易维护:

library(dplyr)

df <- df %>%
  mutate(res = case_when(
    Nat == "B" & Dat == "B" ~ "Both are B",
    Nat == "A" & Dat == "A" ~ "Both are A",
    Dat == "A" ~ "Only Dat is A",
    TRUE ~ "Only Nat is A"
  ))

方法3:映射表合并(适合规则扩展)

先定义规则映射表,再通过合并匹配结果:

# 创建规则映射表
map_table <- data.frame(
  Nat = c("B", "A", "B", "A"),
  Dat = c("B", "A", "A", "B"),
  res = c("Both are B", "Both are A", "Only Dat is A", "Only Nat is A")
)

# 合并得到结果
df <- merge(df, map_table, by = c("Nat", "Dat"), all.x = TRUE)

最终输出

运行任意一种方法后,得到的df即为期望结果:

> df
  Nat Dat            res
1   A   A     Both are A
2   A   B Only Nat is A
3   B   A Only Dat is A
4   B   B     Both are B
5   B   B     Both are B

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:30:55