在R中一次重新调整许多变量

mok*_*oku 2 r

我想知道R中是否有一种以DRY方式分解和重新调整许多变量的方法。因此,可以说我有15个虚拟变量,所有变量都用0和1编码。默认情况下,R使0成为参考类别,我该如何使用factor和relevel函数将所有15个变量的参考级别更改为1。 ?就像是:

varList <- list("V1", "V2", "V3", "V4", "V5", "V6", "V7", 
                 "V8", "V9", "V10", "V11", "V12", "V13", "V14", "V15")

for (i in varList) {
    df$i <- factor(df$i)
    df$i <- relevel(df$i, ref = "1")
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*son 5

您可以使用[[以下方式访问变量:

for (i in varList) {
    df[[i]] <- relevel(factor(df[[i]]), ref = "1")
}
Run Code Online (Sandbox Code Playgroud)

将相同的转换应用于数据帧的许多列的另一种方法是使用dplyr的mutate_each函数:

library(dplyr)
var_vector <- c("V1", "V2", "V3", "V4", "V5", "V6", "V7", 
                "V8", "V9", "V10", "V11", "V12", "V13", "V14", "V15")

relev <- function(f) relevel(factor(f), ref = "1")

df <- mutate_each(df, funs(relev), one_of(var_vector))
Run Code Online (Sandbox Code Playgroud)

如果您要转换的所有列都遵循特定的模式,则可以简单地执行以下操作:

# transform columns that start with V
df <- mutate_each(df, funs(relev), starts_with("V"))
# transform columns that have V then a number
df <- mutate_each(df, funs(relev), matches("^V\\d+"))
Run Code Online (Sandbox Code Playgroud)