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

如何在R语言中对比DataFrame列并生成分类列?

问题解决:动态生成分组列

你的代码失效的核心原因是:在across里,.代表的是当前列的值,不是列名,没法通过._breakpoint直接引用对应的断点列。需要动态获取当前列名,再匹配对应的断点列。

正确代码

library(dplyr)

data3 <- data2 %>%
  mutate(across(
    c(beta, zerotrade),
    ~ case_when(
      .x <= !!sym(paste0(cur_column(), "_breakpoint")) ~ "low",
      .x > !!sym(paste0(cur_column(), "_breakpoint")) ~ "high"
    ),
    .names = "{.col}_portfolio"
  ))

关键细节解释

  • cur_column():获取across当前正在处理的列名(比如处理beta时返回字符串"beta")
  • paste0(cur_column(), "_breakpoint"):拼接出对应的断点列名(比如"beta_breakpoint")
  • !!sym(...):把拼接出来的字符串列名转换成dplyr可以识别的列对象
  • .names = "{.col}_portfolio":指定新列的命名规则,自动生成beta_portfolio和zerotrade_portfolio

验证输出

运行上述代码后,生成的data3会和你期望的结构一致:

yyyymm beta zerotrade beta_breakpoint zerotrade_breakpoint beta_portfolio zerotrade_portfolio
1 197001   13        27              15                   25            low                high
2 197002   11        13              17                   23            low                 low

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:02:35