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

如何在R中使用purrr包的map变体基于lambda向量生成新列?

用purrr批量生成新列的解决方案

核心实现代码

直接使用purrr::reduce()累积处理数据框,逐步添加对应lambda值的新列:

library(tidyverse)

multiply_column <- function(data, column_name, lambda) {
    new_column_name <- paste0(column_name, "_multiplied_", lambda)
    
    data %>%
        mutate(!!new_column_name := !!sym(column_name) * lambda)
}

lambda_values <- c(0.5, 0.75, 0.9)

# 批量生成新列
mtcars_processed <- lambda_values %>%
    reduce(.init = mtcars, ~ multiply_column(.x, "mpg", .y))

# 查看前10行结果
head(mtcars_processed, 10)

代码说明

  • reduce()从.init指定的初始数据框(mtcars)开始,依次遍历lambda_values中的每个值:
    • .x代表每次迭代后累积得到的结果数据框
    • .y代表当前正在处理的lambda值
    • 每次调用multiply_column,都会在现有数据框上新增一列,最终得到包含所有目标列的完整数据框

另一种实现方式(map + 合并)

如果偏好先用map生成所有新列再合并,也可以这么写:

# 先生成所有新列(仅保留新增列)
new_columns <- lambda_values %>%
    map_dfc(~ multiply_column(mtcars, "mpg", .y) %>% select(starts_with("mpg_multiplied")))

# 和原数据框合并
mtcars_processed <- bind_cols(mtcars, new_columns)

两种方式都能得到你期望的输出格式,其中reduce的方式更高效,因为不需要重复处理原数据框多次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:24:52