簡體   English   中英

在R中同時重新定義許多變量

[英]relevel many variables at once in R

我想知道在R中是否有一種方法能夠以干燥方式分解和重新定位許多變量。 所以假設我有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")
}

您可以使用[[以這種方式訪問​​變量:

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

將相同的轉換應用於數據幀的許多列的替代方法是使用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))

如果要轉換的列都遵循特定模式,則可以執行以下操作:

# 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+"))

我們可以使用set from data.table來更改循環中的多個列。 它非常有效,因為避免了[.data.table的開銷。

library(data.table)#v1.9.5
setDT(df)
nm1 <- unlist(varList)

for(j in nm1){
   set(df, i=NULL, j=j, value=relevel(factor(df[[j]]), ref="1"))
}  

str(df)

數據

set.seed(12)
df <- as.data.frame(matrix(as.character(sample(0:9, 20*100, 
        replace=TRUE)), ncol=20))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM