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

如何将数据框中的sample_id列映射到对应文件名?

解决方案

你的代码存在两个关键问题:

  1. files是列表类型,grep需要传入字符向量,需先转换为unlist(files);
  2. 在mutate中直接调用grep时,它会将整个sample_id列作为匹配模式,而非逐行处理单个样本ID。

以下是几种可行的实现方式:

方式一:用dplyr的rowwise()逐行匹配

library(dplyr)

# 将列表转为字符向量
files_vec <- unlist(files)

df <- df %>%
  rowwise() %>%
  mutate(filename = grep(sample_id, files_vec, value = TRUE)) %>%
  ungroup()

方式二:用purrr的map_chr()批量映射

library(dplyr)
library(purrr)

files_vec <- unlist(files)

df <- df %>%
  mutate(filename = map_chr(sample_id, ~grep(.x, files_vec, value = TRUE)))

方式三:提取文件名中的样本ID后合并(更稳健)

如果文件名固定为sample_id_xxx.后缀格式,可先从文件名中提取样本ID,生成匹配表后再与原数据框合并,能避免误匹配包含样本ID子串的无关文件名:

library(dplyr)
library(stringr)

files_vec <- unlist(files)

# 生成样本ID与文件名的匹配表
match_df <- tibble(
  filename = files_vec,
  sample_id = str_extract(filename, "^x\\d+") # 根据你的样本ID格式调整正则,此处匹配开头的x+数字
)

# 合并到原数据框
df <- df %>%
  left_join(match_df, by = "sample_id")

内容的提问来源于stack exchange,提问作者APompetti-Cori

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:03:24