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

基于Flag标记反转fastDummies虚拟变量的tidyverse实现方案咨询

使用tidyverse实现虚拟变量的条件反转

需求说明

已通过fastDummies工具为字符型变量Var_1和Var_2生成对应虚拟变量列,需根据Flag1和Flag2的值对虚拟变量做条件反转:

  • 当Flag1 = 1时,反转所有Var_1_前缀的虚拟变量(0与1互换)
  • 当Flag2 = 1时,反转所有Var_2_前缀的虚拟变量

解决方案代码

结合tidyverse的mutate_at函数可简洁实现该逻辑,完整代码如下:

list.of.packages <-
  c("data.table", "tidyverse", "stringr","janitor","fastDummies")
new.packages <-
  list.of.packages[!(list.of.packages %in% installed.packages()[, "Package"])]
if (length(new.packages))
  install.packages(new.packages)

lapply(list.of.packages, require, character.only = TRUE)

# 生成原始数据及虚拟变量
df = data.frame(PID = c(0001,0001,0001,0001,0001,0001,0001,0001,0001,0001,0001,0001,0001), 
                Flag1 = c(0,0,1,0,0,0,0,1,0,0,0,1,0), 
                Flag2 = c(0,0,0,0,0,1,0,0,0,1,0,0,0), 
                Var_1 = c("AB","CD","EF","GH","IJ","KL","MN","OP","QR","ST","UV","WX","YZ"), 
                Var_2 = c("AB","CD","EF","GH","IJ","KL","MN","OP","QR","ST","UV","WX","YZ"))
df <- dummy_cols(df, select_columns = "Var_1", remove_selected_columns=FALSE, omit_colname_prefix=FALSE)
df <- dummy_cols(df, select_columns = "Var_2", remove_selected_columns=FALSE, omit_colname_prefix=FALSE)

# 条件反转虚拟变量
df <- df %>%
  mutate_at(vars(matches("^Var_1_")), ~ ifelse(Flag1 == 1, 1 - ., .)) %>%
  mutate_at(vars(matches("^Var_2_")), ~ ifelse(Flag2 == 1, 1 - ., .))

代码解释

  • vars(matches("^Var_1_")):通过正则匹配选中所有以Var_1_开头的虚拟变量列
  • ~ ifelse(Flag1 == 1, 1 - ., .):对选中列,判断Flag1是否为1,若是则用1 - 当前值实现0、1反转,否则保留原数值
  • 同理处理Var_2_前缀的列,对应Flag2的判断逻辑

执行后的数据将完全符合目标效果,无需额外编写复杂函数或循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:09:50