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

在R中按指定顺序将向量值作为指数对特定列做幂运算的方法

解决方案

你的问题出在across默认会对每一列重复使用整个Effi向量运算,导致每个列都生成了多组结果,而非对应单个效率值计算。要实现列与效率值一一对应的运算,有两种简洁的方法:

方法1:结合across与列位置匹配

先明确要处理的列的顺序(和Effi严格对应),然后通过cur_column()获取当前列的位置,匹配对应的效率值:

library(dplyr)

# 定义列顺序,必须和Effi的元素顺序完全对应
target_cols <- c("delta_GOI_A_Ct", "delta_GOI_B_Ct", "delta_Mean_REF_Ct")
Effi <- c(1.9, 1.8, 1.2)

df7 <- df6 %>%
  mutate(
    across(
      all_of(target_cols),
      ~ Effi[match(cur_column(), target_cols)]^-.x,
      .names = "{sub('delta', 'FC', .col)}"
    )
  )

方法2:用purrr::map2逐个映射列与效率值

这种方法更直观,直接把列名和对应的效率值配对计算,再绑定到原数据框:

library(dplyr)
library(purrr)

target_cols <- c("delta_GOI_A_Ct", "delta_GOI_B_Ct", "delta_Mean_REF_Ct")
Effi <- c(1.9, 1.8, 1.2)
# 定义新列名
fc_cols <- sub("delta", "FC", target_cols)

df7 <- df6 %>%
  bind_cols(
    map2_dfc(target_cols, Effi, ~ .y^-df6[[.x]]) %>%
      set_names(fc_cols)
  )

为什么原代码出错

原代码中function(x) (Effi^-x)会对每个delta列的每个元素,都用Effi的三个值分别计算,最终每个列都会生成3列结果(而非1列),这显然不符合你的需求。上面两种方法都确保了单个列对应单个效率值的运算逻辑。

内容的提问来源于stack exchange,提问作者A.Mokhtari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:47:03