如何将字符向量与R数据框匹配并新增0/1匹配标识列
R语言逐行匹配生成标记列的实现方案
注意:你提供的vec为字符型,df中mp开头的列均为数值型,匹配前需要先统一两类数据的类型,避免匹配失效。
方法1:基础R实现
如果已经有df和vec可以跳过构造示例数据的步骤:
# 构造示例数据框 df <- data.frame( ID = c("C1", "C2", "C3"), mp1 = c(25, 24, 28), mp2 = c(28, 45, 33), mp3 = c(32, 38, 24), mp4 = c(37, 0, 20) ) # 构造匹配向量 vec <- c('32','35','28') # 统一数据类型:把字符向量转成数值型 vec_num <- as.numeric(vec)
新增dec列的核心代码:
# 跳过ID列,逐行判断是否存在匹配值,转1/0标记 df$dec <- as.integer(apply(df[, !colnames(df) == "ID"], 1, function(row) any(row %in% vec_num)))
方法2:dplyr(tidyverse体系)实现
代码更简洁易读:
library(dplyr) df <- df %>% # 按行分组处理 rowwise() %>% # 选中所有mp开头的列做匹配判断 mutate(dec = as.integer(any(c_across(starts_with("mp")) %in% vec_num))) %>% # 取消行分组,避免影响后续数据操作 ungroup()
两种方法输出的结果都和预期一致:
ID mp1 mp2 mp3 mp4 dec 1 C1 25 28 32 37 1 2 C2 24 45 38 0 0 3 C3 28 33 24 20 1
内容的提问来源于stack exchange,提问作者Muhammad Numan
相关产品推荐
相关产品推荐

