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

在dplyr中用mutate处理多列时,如何按列名匹配引用另一数据框行值?

问题解决方案

方法一:使用mutate(across)直接处理

先把中位数表转换成命名向量,通过列名直接匹配对应中位数:

# 将dft2_stat_norm转为命名向量,列名对应An_Names,值对应median_Resp_norm
median_vec <- tibble::deframe(dft2_stat_norm)

# 批量处理目标列
dft_MOM_full <- dft_Resp_norm %>%
  select(1:7) %>%
  mutate(across(any_of(analytes), ~ .x / median_vec[cur_column()]))

说明:deframe能把两列结构的tibble转成命名向量,cur_column()会获取当前正在处理的列名,精准匹配对应的中位数。

方法二:通过pivot_longer重塑数据处理

这种方法逻辑更直观,适合理解数据格式转换的思路:

dft_MOM_full <- dft_Resp_norm %>%
  select(1:7) %>%
  # 将目标列转换为长格式
  pivot_longer(any_of(analytes), names_to = "An_Names", values_to = "value") %>%
  # 关联中位数表,匹配对应列的中位数
  left_join(dft2_stat_norm, by = "An_Names") %>%
  # 计算除以中位数后的值
  mutate(MOM = value / median_Resp_norm) %>%
  # 转回宽格式,恢复原始数据结构
  pivot_wider(id_cols = c(Datum, Lfd_Nr, Probe, cond), 
              names_from = "An_Names", values_from = "MOM")

说明:先把宽表转成包含列名和对应值的长表,通过列名关联中位数数据,计算完成后再转回宽表,保持原始数据的列结构。

入门学习资料推荐
  • 《R数据科学》(R for Data Science):tidyverse生态的入门核心读物,覆盖数据导入、清洗、转换、可视化全流程,案例贴近实际,适合新手系统建立数据处理思维。
  • tidyverse官方入门教程:聚焦dplyr、tidyr等核心包的基础用法,通过分步练习快速掌握数据操作逻辑。
  • swirl包:交互式R练习工具,可在R控制台内完成知识点练习,边学边练巩固基础。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:50:26