[英]Relevel many variables with given different reference level using for loop in 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.