我正在尝试学习how to provide a reproducible R example,以防我将来需要一个。{/ p>
我使用SimSurv()
函数,我想向它添加六个新列(二进制变量)。这些列的值不应该是平行的或交叉的,即。对于元素1到100,var1
必须具有值1,其余为0; var2
将从101到200开始,依此类推。
x = SimSurv(600)
var1 = matrix(0:1, nrow=100) # 1 - 100
var2 = matrix(0:1, nrow=100) # 101 - 200
...
var6 = matrix(0:1, nrow=100) # 501 - 600
我不能将这一句话变成合法的谷歌搜索,因此我在这里要求解释我的问题。
答案 0 :(得分:3)
您可以使用gl()
和model.matrix()
:
y <- gl(6, 100)
mat <- model.matrix(~y-1) # -1 is for remove the intercept
colnames(mat) <- paste0('var', 1:6)
mat
答案 1 :(得分:0)
如果我理解正确,您可以使用rep
和matrix
这样做:
m <- rep( rep( c( 1 , 0 ) , times = c( 100 , 600 ) ) , 6 )
matrix( m[1:3600] , nrow = 600 , byrow = FALSE )
在一个小100倍的例子中,这给出了以下非交叉的二进制变量列:
m <- rep( rep( c( 1 , 0 ) , times = c( 1 , 6 ) ) , 6 )
matrix( m[1:36] , nrow = 6 , byrow = FALSE )
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 1 0 0 0 0 0
#[2,] 0 1 0 0 0 0
#[3,] 0 0 1 0 0 0
#[4,] 0 0 0 1 0 0
#[5,] 0 0 0 0 1 0
#[6,] 0 0 0 0 0 1