如何用dplyr批量计算R语言中多组对应列的差值?
用dplyr自动化计算多组对应列的差值
针对你的需求,这里提供一种基于dplyr的简洁自动化方案,无需手动逐个计算每一组列的差值:
首先是你的示例数据集:
data <- data.frame( A.a= c(1,2,3,4,5), A.b= c(10,9,8,7,6), A.c= c(5,5,5,5,5), B.a= c(1,10,100,1000,10000), B.b= c(2,20,200,2000,20000), B.c= c(3,30,300,3000,30000) )
核心实现代码
library(dplyr) library(stringr) data <- data %>% mutate( # 选中所有以"B."开头的列 across(starts_with("B."), # 计算当前B列减去对应A列的差值 ~ .x - get(str_replace(cur_column(), "^B\\.", "A\\.")), # 定义新列的命名规则:diff.后缀 .names = "diff.{str_remove(.col, 'B\\.')}" ) )
代码说明
starts_with("B."):精准筛选所有需要计算差值的"B开头"列,适配你百组以上列的场景str_replace(cur_column(), "^B\\.", "A\\."):自动将当前B列的列名替换为对应的A列名,比如把"B.a"转为"A.a"get():根据转换后的列名获取对应A列的数值,实现B列与A列的匹配计算.names:自定义新列的命名格式,生成diff.a、diff.b、diff.c这类清晰的列名
验证结果
运行代码后,查看数据集即可看到新增的差值列:
print(data)
输出示例:
A.a A.b A.c B.a B.b B.c diff.a diff.b diff.c 1 1 10 5 1 2 3 0 -8 -2 2 2 9 5 10 20 30 8 11 25 3 3 8 5 100 200 300 97 192 295 4 4 7 5 1000 2000 3000 996 1993 2995 5 5 6 5 10000 20000 30000 9995 19994 29995
内容的提问来源于stack exchange,提问作者Jberry
相关产品推荐
相关产品推荐

