在R DataFrame中自动拼接所有列生成新列的简洁实现方法
简洁实现方案
以下几种方法无需显式写出每个列名,能高效处理任意数量的目标列:
方法1:dplyr rowwise + c_across(推荐,dplyr风格)
利用rowwise()按行处理,c_across(-model_id)选中除model_id外的所有列,再用paste()完成拼接:
want = model_spec %>% rowwise() %>% mutate(model_formula = paste0('y ~ ', paste(c_across(-model_id), collapse = '+'))) %>% ungroup() %>% select(model_id, model_formula)
如果列名有规律(比如都是var开头),也可以用c_across(starts_with("var"))这类选择器精准筛选目标列。
方法2:基础R apply函数
用apply()按行遍历目标列,直接完成拼接操作:
want = model_spec %>% mutate(model_formula = paste0('y ~ ', apply(select(., -model_id), 1, paste, collapse = '+'))) %>% select(model_id, model_formula)
这个方法不需要额外启用行处理模式,代码更紧凑。
方法3:tidyr unite + 字符串处理
先通过unite把目标列合并成临时字符串列,再补充前缀得到最终结果:
library(tidyr) want = model_spec %>% unite(col = "temp", -model_id, sep = "+", remove = FALSE) %>% mutate(model_formula = paste0('y ~ ', temp)) %>% select(model_id, model_formula) %>% select(-temp) # 可选,移除临时列
内容的提问来源于stack exchange,提问作者Chang Xu
相关产品推荐
相关产品推荐

