代码之家  ›  专栏  ›  技术社区  ›  aaaaa

按顺序向矩阵中添加行和列,并用NaN填充

  •  0
  • aaaaa  · 技术社区  · 6 年前

    我有一个矩阵 mat_1 具有镜面反射的行和列,但缺少其中一个。假设我希望行和列按照字母顺序排列:A、B、C、D、E,但是我的矩阵缺少一个字母,即B。

    如何生成一个代码段,找出字母序列中的空缺(s) Mat1 ,添加缺少的行和列,并用 NaN 在第二个矩阵中 mat_2 ?

    下面是我的可复制示例:

    set.seed(100)
    
    #create matrix with missing column and row
    mat_1 = matrix(rnorm(16), nrow=4, ncol=4, byrow = TRUE) 
    
    #rename columns and rows
    dimnames(mat_1) = list(c("a", "c", "d", "e"), c("a", "c", "d", "e")) 
    
    #expected output
    > mat_2
               a    b          c           d           e
    a -0.5021924  NaN  0.1315312 -0.07891709  0.88678481
    b        NaN  NaN        NaN         NaN         NaN
    c  0.1169713  NaN  0.3186301 -0.58179068  0.71453271
    d -0.8252594  NaN -0.3598621  0.08988614  0.09627446
    e -0.2016340  NaN  0.7398405  0.12337950 -0.02931671
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   DS_UNI    6 年前

    一分钟前有一个答案,我相信这是一个很好的答案,实际上我又来了一些修改,然后投票表决,但是它似乎被删除了。

    无论如何,这里是上述答案的更新版本

    #create matrix with missing column and row
    mat_1 = matrix(rnorm(16), nrow=4, ncol=4, byrow = TRUE) 
    
    #rename columns and rows
    dimnames(mat_1) = list(c("a", "c", "d", "e"), c("a", "c", "d", "e")) 
    
    mat_2 <- matrix(
      NA,
      nrow = length(letters[1:5]),
      ncol = length(letters[1:5]),
      dimnames = list(letters[1:5], letters[1:5]))
    
    mat_2[rownames(mat_1), colnames(mat_1)] <- mat_1
    
    mat_2
    
    #            a  b          c           d           e
    # a -0.5021924 NA  0.1315312 -0.07891709  0.88678481
    # b         NA NA         NA          NA          NA
    # c  0.1169713 NA  0.3186301 -0.58179068  0.71453271
    # d -0.8252594 NA -0.3598621  0.08988614  0.09627446
    # e -0.2016340 NA  0.7398405  0.12337950 -0.02931671