如何从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
谢谢!
答案 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