You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在dplyr/across中排除指定列后对数值列执行*-1运算

使用dplyr的across函数对数值列取反并排除指定列

要实现对数据框内的数值列执行乘以-1的运算,同时排除指定列(单个或多个列),可以借助dplyr包中的across()函数,结合列类型判断与列名筛选完成。以下是具体实现示例:

准备测试数据

先构造一个包含分类列和数值列的测试数据框:

library(tidyverse)    
raw_data <- data.frame(
  type=c('A','B','C'),
  cat=c("cat1","cat2","cat3"),
  a3=1:3,
  b2=1:3,
  c2=1:3,
  c1=1:3,
  a2=1:3,
  b1=1:3,
  a1=1:3)

场景1:排除单个指定列(如a1)

对所有数值列执行取反操作,但保留a1列的原始值:

# 对数值列乘以-1,排除a1列
raw_data %>% mutate(across(where(is.numeric) & !"a1", ~. * -1))

场景2:排除多个指定列(如a1、a2)

同时排除a1和a2列,仅对其余数值列执行取反:

# 对数值列乘以-1,排除a1、a2列
raw_data %>% mutate(across(where(is.numeric) & !(. %in% c('a1','a2')), ~. * -1))

核心逻辑解释

  • where(is.numeric):筛选出数据框中所有数值类型的列
  • !"a1":通过列名匹配排除单个指定列
  • !(. %in% c('a1','a2')):通过列名向量匹配排除多个指定列
  • ~. * -1:对选中的列执行乘以-1的取反运算

内容的提问来源于stack exchange,提问作者anderwyang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 19:32:46