R:如何将有序因子转换为伪变量?
比如说。具有有序级别的因子 [1] 06634 级别:0<1<2<3<4<5<6 应转换为 ti0 ti1 ti2 ti3 ti4 ti5 ti6 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1100 我已经看过类似于假人的软件包和类似于model.matrix的函数,但无法找到解决方案。这似乎可行R:如何将有序因子转换为伪变量?,r,dummy-variable,R,Dummy Variable,比如说。具有有序级别的因子 [1] 06634 级别:0
x <- factor(c("0", "0", "6", "6", "3", "4"), levels = 0:6, ordered = TRUE)
out <- matrix(0, nrow = length(x), ncol = max(as.numeric(x)))
for (i in 1:length(x)) {
out[i, 1:as.numeric(x[i])] <- 1
}
colnames(out) <- paste("ti", levels(x), sep = "")
ti0 ti1 ti2 ti3 ti4 ti5 ti6
[1,] 1 0 0 0 0 0 0
[2,] 1 0 0 0 0 0 0
[3,] 1 1 1 1 1 1 1
[4,] 1 1 1 1 1 1 1
[5,] 1 1 1 1 0 0 0
[6,] 1 1 1 1 1 0 0
如果您的目的是创建一个具有自定义对比度矩阵的变量,并且在您的情况下,看起来您正在创建一个如上所述的累积编码顺序变量,那么您可以执行以下操作
x <- factor(c("0", "0", "6", "6", "3", "4"), levels = 0:6, ordered = TRUE)
# Create custom contrast function
contr.cum <- function(x, base = 1L)
{
dmns <- levels(x)
n <- length(dmns)
contr <- array(diag(n), dim = c(n,n), dimnames = list(dmns, dmns))
contr[lower.tri(contr)] <- 1
contr <- contr[, -base, drop = FALSE]
contr
}
# Apply custom function to variable
contrasts(x) <- contr.cum(x)
# View model matrix
model.matrix(~x)
此“定制”变量可直接用于其他函数,如回归方程,而无需手动创建虚拟变量。请查看此问题的答案: