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

