如何为应用left函数后的新列自动添加_left后缀?
解决方案
要实现自动生成带_left后缀的新列,无需手动修改列名,推荐使用dplyr 1.0.0+版本引入的across()函数(mutate_at()已软弃用),通过.names参数自动拼接后缀:
修改后的完整代码
study <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) bd_acct <- c(57,66,72,24,76,98,56,32,43,250000,87,34,0,0,67) cc <- c(1,2,3,5,74,3,5,6,5,3,5,6,7,4,1) trial_A <- data.frame(study, bd_acct,cc) left <- function(x, na.rm = FALSE) (quantile(x,0.25) - 1.5*IQR(x)) # 自动生成带_left后缀的新列 trial_A <- trial_A %>% mutate(across(c("bd_acct", "cc"), left, .names = "{col}_left"))
关键说明
across()的.names参数支持占位符:{col}会自动替换为当前处理的原列名,加上_left就生成了目标列名- 运行后,原数据框的
study、bd_acct、cc列会保留,同时新增bd_acct_left和cc_left两列
旧语法兼容方案(若需使用mutate_at)
如果仍习惯用mutate_at(),可以通过命名列表的方式自动添加后缀:
trial_A <- trial_A %>% mutate_at(vars("bd_acct", "cc"), list(left = left))
这里列表的名字left会作为后缀,生成对应新列。
内容的提问来源于stack exchange,提问作者GJW
相关产品推荐
相关产品推荐

