基于两列数据与向量值创建新变量Match的R语言需求
为DataFrame添加Match列的实现方案
已知条件
- 现有包含
V1、V2两列的DataFrame - 预先定义向量Z:
Z <- c('931', '907','905','902','8552','855','8542','854','8532','853','852','851','850')
Match列取值规则
- 当
V1与V2值完全相同时,Match赋值为1 - 当
V1和V2的值都存在于向量Z中时,Match赋值为2 - 当
V1或V2有任意一个值不在向量Z中时,Match赋值为3
实现代码
使用dplyr包的case_when函数可以清晰实现上述逻辑(若未安装dplyr,先运行install.packages("dplyr")完成安装):
library(dplyr) # 为目标DataFrame添加Match列 df <- df %>% mutate(Match = case_when( V1 == V2 ~ 1, V1 %in% Z & V2 %in% Z ~ 2, TRUE ~ 3 ))
验证结果
处理后的DataFrame与示例要求一致:
| V1 | V2 | Match |
|---|---|---|
| 8552 | 689 | 3 |
| 576 | 8552 | 3 |
| 8552 | 907 | 2 |
| 8552 | 85 | 3 |
| 8552 | 902 | 2 |
| 8552 | 783 | 3 |
| 931 | 367 | 3 |
| 8552 | 1090 | 3 |
| 8552 | 905 | 2 |
| 8552 | 8552 | 1 |
| 8552 | 1004 | 3 |
| 113 | 907 | 3 |
| 8552 | 1001 | 3 |
| 8542 | 564 | 3 |
| 850 | 720 | 3 |
内容的提问来源于stack exchange,提问作者vp_050
相关产品推荐
相关产品推荐

