【问题标题】:Duplicating values from matrix next to the original value in R将矩阵中的值复制到 R 中的原始值旁边
【发布时间】:2022-01-03 04:04:35
【问题描述】:

我有一个包含模拟数据的矩阵。数据涉及重复测量情况,对于一个变量,我想复制模拟值。当前矩阵如下所示:

      [,1]  [,2]   [,3]  [,4]  [,5]  [,6]
[1,] 1.647 1.125  0.559 1.614 1.578 0.377
[2,] 0.555 0.395  1.090 0.896 2.135 1.184
[3,] 0.269 2.022 -0.184 0.614 1.128 1.036

列表示重复测量,行表示个体。重要的是重复值位于原始值旁边,因此它看起来像这样(对于第一行):

      [,1]  [,2]   [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
[1,] 1.647 1.647 1.125 1.125  0.559 0.559 1.614 1.614 1.578 1.578 0.377 0.377

我尝试了一些方法,但这导致从第 7 列开始获得重复序列。有没有办法(轻松)获得这个结果?提前致谢。

【问题讨论】:

    标签: r matrix replicate


    【解决方案1】:

    对于大型矩阵,这可能会更快,因为它是矢量化的

    mat <- matrix(rnorm(18), nrow = 3)
    vmat <- as.vector(mat)
    mat2 <- matrix(c(rbind(vmat, vmat)), nrow = nrow(mat), byrow = TRUE)
    mat2
    

    【讨论】:

      【解决方案2】:

      您可以尝试将applyrep 结合使用

      t(apply( dat, 1, rep, each=2 ))
      
              V1    V1    V2    V2     V3     V3    V4    V4    V5    V5    V6    V6
      [1,] 1.647 1.647 1.125 1.125  0.559  0.559 1.614 1.614 1.578 1.578 0.377 0.377
      [2,] 0.555 0.555 0.395 0.395  1.090  1.090 0.896 0.896 2.135 2.135 1.184 1.184
      [3,] 0.269 0.269 2.022 2.022 -0.184 -0.184 0.614 0.614 1.128 1.128 1.036 1.036
      

      【讨论】:

        【解决方案3】:

        您可以通过对每列进行两次子集化来解决您的问题:

        mat[, rep(1:ncol(mat), each=2)]
        
        #       [,1]  [,2]  [,3]  [,4]   [,5]   [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
        # [1,] 1.647 1.647 1.125 1.125  0.559  0.559 1.614 1.614 1.578 1.578 0.377 0.377
        # [2,] 0.555 0.555 0.395 0.395  1.090  1.090 0.896 0.896 2.135 2.135 1.184 1.184
        # [3,] 0.269 0.269 2.022 2.022 -0.184 -0.184 0.614 0.614 1.128 1.128 1.036 1.036
        

        数据

        mat = structure(c(1.647, 0.555, 0.269, 1.125, 0.395, 2.022, 0.559, 
                          1.09, -0.184, 1.614, 0.896, 0.614, 1.578, 2.135, 1.128, 0.377, 
                          1.184, 1.036), .Dim = c(3L, 6L))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-16
          • 2011-05-27
          • 1970-01-01
          相关资源
          最近更新 更多