如何将一组列与另一组列比较并生成匹配标记列?
R语言实现组间匹配标记变量
原始数据框
首先定义原始数据:
df <- data.frame(jan=c(10,7,1), feb=c(20,9,2), mar=c(30,6,3), apr=c(5,5,4), may=c(0,9,5), jun=c(10,8,6) )
输出结果:
jan feb mar apr may jun 1 10 20 30 5 0 10 2 7 9 6 5 9 8 3 1 2 3 4 5 6
需求说明
需要为数据框新增一列flag,规则为:
- 将
jan、feb、mar列为一组,apr、may、jun列为另一组 - 逐行检查两组列中是否存在匹配值,存在则
flag='Y',否则flag='N'
解决方案
方法一:Base R 实现
使用apply逐行处理,通过intersect判断两组是否有交集:
df$flag <- apply(df, 1, function(row) { group1 <- row[c("jan", "feb", "mar")] group2 <- row[c("apr", "may", "jun")] ifelse(length(intersect(group1, group2)) > 0, "Y", "N") })
方法二:dplyr 实现
借助dplyr的行处理功能,用%in%判断是否存在匹配值:
library(dplyr) df <- df %>% rowwise() %>% mutate(flag = ifelse(any(c(jan, feb, mar) %in% c(apr, may, jun)), "Y", "N")) %>% ungroup()
最终结果
执行上述任一方法后,数据框输出如下:
jan feb mar apr may jun flag 1 10 20 30 5 0 10 Y 2 7 9 6 5 9 8 Y 3 1 2 3 4 5 6 N
内容的提问来源于stack exchange,提问作者jkatam
相关产品推荐
相关产品推荐

