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

R中是否有函数可基于部分相似字符串匹配数据框列?

R匹配两个数据框列的实现方案

你可以通过修改其中一个数据框的匹配键字符串后进行关联合并,dplyr+stringr的组合可以简洁完成该需求,base R也可实现对应操作。


方法1:tidyverse 实现(推荐)

library(dplyr)
library(stringr)

# 构造你的样例数据,实际使用时替换为你自己的数据框即可
df1 <- data.frame(
  Stimulus = c("CR00", "CR01", "DF_0_30", "DF_6_40"),
  Mean = c(0.333, 0.972, 0.831, 0.327)
)

df2 <- data.frame(
  Stimulus = c("DF_0_30_FAM", "CR00_FAM", "DF_6_40_FAM", "CR01_FAM"),
  Mean = c(0.423, 0.768, 0.672, 0.012)
)

# 合并两个数据框,仅保留匹配成功的行
merge_df <- df2 %>%
  # 移除Stimulus末尾的_FAM后缀,$符号确保只匹配末尾的_FAM,避免误改中间包含_FAM的字符串
  mutate(Stimulus = str_remove(Stimulus, "_FAM$")) %>%
  # 按Stimulus列匹配合并,自动重命名重复的Mean列
  inner_join(df1, by = "Stimulus", suffix = c("_df2", "_df1"))

# 直接计算两组Mean的相关性
cor(merge_df$Mean_df1, merge_df$Mean_df2)

方法2:base R 实现(无需加载额外包)

# 构造匹配键,移除df2 Stimulus末尾的_FAM后缀
df2$Stimulus_match <- sub("_FAM$", "", df2$Stimulus)
# 合并两个数据框
merge_df <- merge(df1, df2, by.x = "Stimulus", by.y = "Stimulus_match", suffixes = c("_df1", "_df2"))
# 计算相关性
cor(merge_df$Mean_df1, merge_df$Mean_df2)

补充说明

如果需要保留df1的所有行(无论是否匹配到df2的对应条目),将inner_join替换为left_join即可;base R方案则在merge函数中添加参数all.x = TRUE。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:15:02