首页 > 解决方案 > 如何从 R 中的数值变量创建虚拟变量?

问题描述

如何从 R 中的数值变量创建虚拟变量?我想创建 N 个虚拟变量。以这种方式,数字变量表示将出现多少个零,从第一列开始计数。想象一下N = 6。像这样:

   x
a  5
b  2
c  4
d  1
e  9

它必须变成:

   1 2 3 4 5 6
a  0 0 0 0 0 1
b  0 0 1 1 1 1
c  0 0 0 0 1 1
d  0 1 1 1 1 1
e  0 0 0 0 0 0

谢谢!

标签: rdataframetransformation

解决方案


我们可以通过创建索引并根据索引将已创建的 1 分配给 0 以vectorized 方式执行此操作row/columnmatrix

m1 <- matrix(1, ncol = N, nrow = length(x), 
       dimnames = list(letters[seq_along(x)], seq_len(N)))
x1 <- pmin(x, ncol(m1))
m1[cbind(rep(seq_len(nrow(m1)), x1), sequence(x1))] <- 0
m1
#  1 2 3 4 5 6
#a 0 0 0 0 0 1
#b 0 0 1 1 1 1
#c 0 0 0 0 1 1
#d 0 1 1 1 1 1
#e 0 0 0 0 0 0

数据

x <- c(5,2,4,1,9)
N <- 6

推荐阅读