R添加具有预定义模式的新列

时间:2014-01-08 10:40:25

标签: r matrix

我正在尝试学习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

我不能将这一句话变成合法的谷歌搜索,因此我在这里要求解释我的问题。

2 个答案:

答案 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)

如果我理解正确,您可以使用repmatrix这样做:

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