从公式调用中获取所有因子变量
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"
我的公式如下所示:
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"