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

在R中使用tidyverse比较数据框变量对并生成标记变量

批量生成变量匹配标记的tidyverse实现

针对你的需求——批量比较var与sum_var变量对,生成var_flag标记变量(1表示值匹配,0表示不匹配),可以用以下tidyverse代码高效实现:

library(tidyverse)

# 先运行你提供的示例数据生成代码
local_iris <- iris %>% 
  mutate(
    across(all_of(starts_with("Sepal")), ~ sum(.x, na.rm = TRUE), .names = "sum_{.col}"),
    across(all_of(starts_with("Petal")), ~ .x + 0, .names = "sum_{.col}")
  )

# 核心:批量生成匹配标记
local_iris_with_flags <- local_iris %>%
  mutate(
    # 遍历所有非sum_开头的原始变量
    across(!starts_with("sum_"),
           # 比较当前变量与对应的sum_变量,转成1/0标记
           ~ as.integer(.x == get(str_c("sum_", cur_column()))),
           # 自动命名为{原始变量名}_flag
           .names = "{.col}_flag")
  )

代码逻辑拆解

  • 自动匹配变量对:通过!starts_with("sum_")定位所有原始变量,再用str_c("sum_", cur_column())拼接出对应的sum_var变量名,无需手动指定每一对。
  • 标记生成规则:as.integer()把TRUE/FALSE的比较结果转为1/0,刚好满足「匹配为1,不匹配为0」的要求。
  • 批量命名:.names参数自动沿用原始变量名,加上_flag后缀,完全符合你要的命名规则。

验证结果

运行下面的代码可以快速查看标记是否符合预期(Petal类变量的标记全为1,Sepal类全为0):

local_iris_with_flags %>%
  select(contains("Petal"), contains("Sepal_flag")) %>%
  head()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:45:57