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

如何将字符向量与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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:06:00