在某些数据集中,我想在模型中使用大量相关变量,例如lm,randomforest,xgboost等。手动输入所有这些变量是不可行的,但是我可以使用regex标识列根据通用前缀进行匹配,例如'fruit _'。
我想构造一个包含许多项的公式
outcome ~ fruit_banana + fruit_apple + fruit_pear + ....
但是,在公式中引用它们比我预期的要复杂。我有一个可行的方法,但是感觉很麻烦,我想知道是否有一个更简洁的方法。
注意,我正在寻找一种不涉及操纵数据框架本身的解决方案,因为在实际情况下,我经常想快速向模型中添加或删除其他变量。其次,我不想按位置引用列,因为这样做不可靠。
示例
在下面的数据集中,我有一个名为'outcome'的变量,我希望使用所有以'a_'开头的变量进行预测,而我想忽略其他10列。
创建玩具数据集:
df = data.frame(outcome = rnorm(100), matrix(rbinom(30*100, 1, 0.2), ncol = 30))
colnames(df)[2:21] = paste0('a_', 1:20)
我目前用于构造公式的方法:
frm = as.formula(paste0("outcome ~ ",
paste(colnames(df)[grep('a_', colnames(df))], collapse = ' + ')))
lm(frm, data = df)