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

在R语言中如何根据参考列匹配其他列并获取匹配列名

问题解决:匹配数据框中指定列对应值的列名

给定如下R语言数据框:

df <- data.frame(
  v1=c(1,2,3,4),
  v2=c("x","y","z","q"),
  v3=c("x","b","c","d"),
  v4=c("a","y","c","d"),
  v5=c("a","b","z","d"),
  v6=c("a","b","c","q")
)

需求:以v2列为参考列,找出其他列中与v2列各行值匹配的列,并获取对应的匹配列名,最终得到指定格式的结果。


方法一:基础R实现

# 筛选出需要匹配的目标列(排除v1和v2)
match_cols <- setdiff(names(df), c("v1", "v2"))

# 逐行查找与v2值匹配的列名
df$match <- apply(df, 1, function(row) {
  target_val <- row["v2"]
  # 找到当前行中与目标值匹配的列
  match_col <- match_cols[row[match_cols] == target_val]
  match_col
})

# 整理成目标格式并输出
result <- df[, c("v1", "v2", "match")]
names(result) <- c("Var 1", "Var 2", "match")

print(result)

运行结果:

Var 1 Var 2 match
1     1     x    v3
2     2     y    v4
3     3     z    v5
4     4     q    v6

方法二:tidyverse 实现

如果习惯使用tidyverse工具链,可以用更简洁的代码:

library(tidyverse)

df %>%
  rowwise() %>%
  # 查找v3到v6中与v2值匹配的列名
  mutate(match = names(select(., v3:v6))[which(c_across(v3:v6) == v2)]) %>%
  # 选择并重命名列
  select(v1, v2, match) %>%
  rename("Var 1" = v1, "Var 2" = v2)

注:以上代码默认每行只有一个匹配列,如果存在多列匹配的情况,可以将match_col改为paste(match_col, collapse = ", ")来合并所有匹配的列名。

内容的提问来源于stack exchange,提问作者BenG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:05:22