【问题标题】:R add new column with predefined patternR添加具有预定义模式的新列
【发布时间】:2014-01-08 10:40:24
【问题描述】:

我正在努力学习how to provide a reproducible R example,以防将来需要。

我使用SimSurv() 函数,我想向它添加六个新列(二进制变量)。这些列的值不应平行或相交,即。 var1 对于元素 1 到 100 的值必须为 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

我无法将这个词放入合法的谷歌搜索中,因此我要求在这里解释我的问题。

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    您可以使用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 很酷 - 我从来没有真正使用过这个功能。我应该再记住这一点!很好的答案。
    【解决方案2】:

    如果我理解正确,您可以使用 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
    

    【讨论】:

      猜你喜欢
      • 2019-03-20
      • 1970-01-01
      • 2019-07-20
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多