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

在R语言数据框中迭代mutate函数,按组合并变量生成新列

按每6列一组合并生成新变量

针对你提供的test75数据框,这里给出一个基于dplyr和purrr的解决方案,通过包含mutate的迭代函数实现按每6个变量一组合并生成新变量:

首先,先确认示例数据框的生成代码:

set.seed(123) # 设置随机种子保证结果可复现
test75 <- data.frame(matrix(sample(0:1, 75 * 6, replace = TRUE), ncol = 75))
names(test75) <- paste0("Q", 1:75)

解决方案代码

library(dplyr)
library(purrr)

# 定义合并函数,支持自定义合并逻辑
merge_col_groups <- function(df, group_size = 6) {
  # 将列名按指定大小分组
  col_groups <- split(names(df), ceiling(seq_along(names(df)) / group_size))
  
  df %>%
    mutate(
      # 迭代每个分组,生成对应的合并变量
      !!!map(names(col_groups), function(group_name) {
        target_cols <- col_groups[[group_name]]
        # 这里以「计算每组变量的和」为例,适合0/1变量的计数需求
        # 如果需要拼接成字符串,可替换为:paste(across(all_of(target_cols)), collapse = "")
        rowSums(across(all_of(target_cols))) %>%
          set_names(paste0("Group", group_name))
      })
    )
}

# 应用函数生成合并后的数据集
test75_merged <- merge_col_groups(test75)

代码说明

  1. 分组逻辑:split(names(df), ceiling(seq_along(names(df))/6))会自动将75列分为12个完整的6列组,以及最后1个包含3列的组,分组结果存放在col_groups中。
  2. 迭代合并:通过purrr::map迭代每个分组,在mutate中生成新变量。!!!用于将map返回的多个变量表达式展开到mutate中。
  3. 自定义合并逻辑:你可以根据需求替换合并操作:
    • 若要将每行的0/1值拼接成字符串,把rowSums(across(...))替换为paste(across(all_of(target_cols)), collapse = "")
    • 若要取每组的最大值,可替换为pmax(across(all_of(target_cols)))

运行后,test75_merged会保留原有的75个变量,同时新增13个合并变量(Group1到Group13)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:42:47