如何在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
相关产品推荐
相关产品推荐

