如何从R中的数字变量创建伪变量?

时间:2018-12-13 23:06:03

标签: r dataframe transformation

如何从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

谢谢!

2 个答案:

答案 0 :(得分:0)

这是为您提供的可靠解决方案

x = c(5,2,4,1,9)
N = 6
out = matrix(1, length(x), N)

for (i in 1:length(x))
    out[i,1:min(x[i], N)] = 0

> out
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    0    0    0    0    0    1
[2,]    0    0    1    1    1    1
[3,]    0    0    0    0    1    1
[4,]    0    1    1    1    1    1
[5,]    0    0    0    0    0    0

答案 1 :(得分:0)

我们可以通过创建vectorize索引并根据索引将已创建的row/column的1s分配为0来matrix方式进行操作

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