如何解决从公式调用中获取所有因子变量
我有一个如下所示的公式:
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
公式,然后使用this 历史解决方案grepexp
括号中的所有内容都以“因子”开头。
r <- Reduce(paste0,deparse(formula))
el(regmatches(r,gregexpr("(?<=factor\\().*?(?=\\))",r,perl=T)))
# [1] "z" "B" "A" "D" "G"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。