如何在R tidyverse中基于sp列批量创建192个对比列?
在tidyverse中批量生成对比列的解决方案
需求说明
基于数据集的sp列,参照mp_comp_1的生成逻辑(判断mp_*列值与sp的大小关系,返回"bigger"/"smaller"/"equal"),为所有mp_1到mp_192列批量生成对应的mp_comp_*对比列。
实现代码
library(tidyverse) # 构造示例数据集(模拟含sp、mp_1至mp_192的结构) df <- tibble( sp = c(34.9, 34.3, 34.4), mp_1 = c(35, 32.1, 34.4), mp_2 = c(30, 38.1, 39.4), mp_192 = c(34.9, 34.3, 30.4) # 实际场景中补充mp_3至mp_191列即可 ) # 批量生成对比列 df_processed <- df %>% mutate( across( .cols = starts_with("mp_"), # 选中所有mp_开头的列 .fns = ~if_else(.x > sp, "bigger", if_else(.x < sp, "smaller", "equal")), # 核心对比逻辑 .names = "mp_comp_{str_remove(.col, 'mp_')}" # 自动生成新列名 ) )
关键说明
across():tidyverse中批量处理多列的核心函数,无需重复编写相同逻辑starts_with("mp_"):精准筛选所有目标mp_*列,避免手动枚举192个列名.names参数:通过str_remove()将原列名的mp_前缀替换为mp_comp_,保证mp_N对应mp_comp_N的命名一致性- 逻辑复用:对比规则只需定义一次,自动应用到所有192个
mp_*列
内容的提问来源于stack exchange,提问作者Hamideh
相关产品推荐
相关产品推荐

