在R中如何对data.frame的各列分别减去不同的指定数值
实现方法
下面给出两种常用的实现方案,都可以得到你需要的结果:
方法1:基础R实现(无需加载第三方包)
使用sweep函数可以直接按列批量执行减法操作,代码如下:
# 选中需要处理的列 target_cols <- c("v1", "v2", "v3") # 按列减去对应数值 result <- sweep(Data[, target_cols], MARGIN = 2, STATS = unlist(subtrate), FUN = "-")
代码说明:
MARGIN = 2指定按列进行操作unlist(subtrate)把单行的subtrate数据框转为向量,对应每列的待减数值FUN = "-"指定操作为减法
方法2:dplyr实现(tidyverse生态常用写法)
如果平时用tidyverse系列工具,可以用across按列匹配处理,代码可读性更高:
library(dplyr) result <- Data %>% # 选中需要处理的数值列,剔除Time列 select(v1:v3) %>% # 每列减去subtrate中对应列的数值 mutate(across(everything(), ~ .x - subtrate[[cur_column()]]))
两种方法运行后得到的result都和你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者Vinicius B. de S. Moreira
相关产品推荐
相关产品推荐

