在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)
代码说明
- 分组逻辑:
split(names(df), ceiling(seq_along(names(df))/6))会自动将75列分为12个完整的6列组,以及最后1个包含3列的组,分组结果存放在col_groups中。 - 迭代合并:通过
purrr::map迭代每个分组,在mutate中生成新变量。!!!用于将map返回的多个变量表达式展开到mutate中。 - 自定义合并逻辑:你可以根据需求替换合并操作:
- 若要将每行的0/1值拼接成字符串,把
rowSums(across(...))替换为paste(across(all_of(target_cols)), collapse = "") - 若要取每组的最大值,可替换为
pmax(across(all_of(target_cols)))
- 若要将每行的0/1值拼接成字符串,把
运行后,test75_merged会保留原有的75个变量,同时新增13个合并变量(Group1到Group13)。
内容的提问来源于stack exchange,提问作者Jacob Korir
相关产品推荐
相关产品推荐

