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

如何用across函数批量创建多列?R语言dplyr代码优化需求

简化多列相乘的R代码实现

当需要处理大量类似var1、var2的列时,确实可以用dplyr的across函数结合表连接来简化代码,也可以用purrr的批量处理函数实现更简洁的写法,以下是两种可行方案:

方案一:dplyr join + across 实现

先将两个表按code连接,再通过across批量处理所有目标列的相乘操作:

library(dplyr)
library(stringr)

price <- tribble(
  ~code, ~var1, ~var2,
  "a", 1, 8,
  "b", 4, 5
)

quant <- tribble(
  ~code, ~var1, ~var2,
  "a", 10, 90,
  "b", 12, 88
)

tab3 <- price %>%
  # 按code连接两个表,给重复列名加后缀区分
  inner_join(quant, by = "code", suffix = c("_p", "_q")) %>%
  # 对所有price侧的var列,计算与对应quant侧列的乘积
  mutate(across(starts_with("var") & ends_with("_p"), 
                ~ .x * get(str_replace(cur_column(), "_p", "_q")),
                .names = "{str_remove(.col, '_p')}")) %>%
  # 只保留需要的code和计算后的var列
  select(code, starts_with("var"))

方案二:purrr map2 批量处理列

如果不需要显式连接表,可以直接提取目标列批量相乘后与code列绑定:

library(dplyr)
library(purrr)

# 定义所有需要相乘的列(排除code)
var_cols <- setdiff(names(price), "code")

tab3 <- price %>%
  select(code) %>%
  # 批量对price和quant的对应列执行相乘,结果按列绑定
  bind_cols(map2_dfc(price[var_cols], quant[var_cols], `*`))

两种方案都能避免手动逐个列写相乘逻辑,当新增var3、var4等列时,代码无需修改即可自动适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:05:24