R中如何对data.table/data.frame的指定列按规则成对相减计算差值
实现方案
你可以根据自己的使用习惯选择以下两种常用实现方式:
方法1:基础R实现(无需加载额外包)
# 提取所有列名的公共前缀(去除末尾的1、2后缀) prefixes <- unique(sub("\\d$", "", names(df))) # 遍历每个前缀批量计算差值并追加到原数据框 for (p in prefixes) { df[[paste0(p, "_diff")]] <- df[[paste0(p, 2)]] - df[[paste0(p, 1)]] }
该方法会自动匹配所有前缀相同、后缀为1/2的列对计算差值,不需要手动指定列名,适配列对数较多的场景。
方法2:dplyr实现(适合tidyverse生态用户)
如果你的列对数量较少,可以直接手动指定计算逻辑,写法更直观:
library(dplyr) df <- df %>% mutate( h_diff = h2 - h1, w_diff = w2 - w1, e_diff = e2 - e1 )
如果列对数量多,也可以用批量语法实现自动化计算:
library(dplyr) library(stringr) prefixes <- unique(str_remove(names(df), "\\d$")) df <- df %>% mutate(across(all_of(paste0(prefixes, 2)), .names = "{str_remove(.col, '2')}_diff") - across(all_of(paste0(prefixes, 1))))
运行以上任意一种方法后,原数据框会追加h_diff、w_diff、e_diff三列差值,最终输出的完整数据表同时包含原始列和差值列。
内容的提问来源于stack exchange,提问作者GOGA GOGA
相关产品推荐
相关产品推荐

