如何在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
相关产品推荐
相关产品推荐

