从公式调用中获取所有因子变量

Get all the factor variables from a formula call

我的公式如下所示:

formula <- as.formula(y ~ x + as.factor(z) + A + as.factor(B) + C:as.factor(A) + as.factor(D) + E + F + as.factor(G))

我想提取所有有因子的变量名,将它们转化为因子。如果我使用 all.vars(formula),我会得到所有变量而不仅仅是 as.factor().

想要的结果:

factornames <- c("z", "B", "A", "D", "G")

我最终想将所选变量提供给:

# Turn factors into factors
DF[factornames] <- lapply(DF[factornames], factor)
## turn factor variables into dummies
DF <- as.data.frame(model.matrix(phantom ~ ., transform(DF, phantom=0)))

您可以进行一些字符串操作来获取作为因子的列名。

factornames <- stringr::str_match_all(as.character(formula)[3], 'as.factor\(([A-Za-z])\)')[[1]][,-1]
factornames
#[1] "z" "B" "A" "D" "G"

([A-Za-z]) 正则表达式的一部分应根据数据中的列名进行更改。

我们可以 deparse 公式,然后 grepexp 使用 this 历史解决方案 grepexp 括号中的所有内容都以“因子”开头。

r <- Reduce(paste0, deparse(formula))
el(regmatches(r, gregexpr("(?<=factor\().*?(?=\))", r, perl=T)))
# [1] "z" "B" "A" "D" "G"