【问题标题】:add row and column to matrix based on sequence and fill it with NaN根据序列向矩阵添加行和列并用 NaN 填充
【发布时间】:2018-06-11 20:27:47
【问题描述】:

我有一个矩阵mat_1,其中包含镜面反射的行和列,但缺少其中之一。所以假设我想要按字母顺序排列的行和列:a、b、c、d、e,但我的矩阵缺少一个字母,即 b。

如何生成代码 sn-p 以在 mat_1 的字母顺序中找到间隙,添加缺失的行和列,并在第二个矩阵 mat_2 中使用 NaN 填充观察结果?

这是我的可重现示例:

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

【问题讨论】:

    标签: r matrix row fill col


    【解决方案1】:

    一分钟前有一个答案,我认为这是一个非常好的答案,实际上我再次来评论它并进行了一些修改,并投票赞成它,但它似乎被删除了

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

    #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
    

    【讨论】:

    • 是的,这是我之前的回答;我删除了它,因为它不完整并且只处理列而不是丢失的行。为您的 +1。非常好。
    • 谢谢。如果我有一系列不按字母顺序排列的字母怎么办?
    • 没关系,只需要在mat_2中更改维度名称即可。例如,假设缺少的 col/row 被称为“s”而不是“b”,那么只需在 mat_2 中使用dimnames = list(c('a', 's', 'c', 'd', 'e'), c('a', 's', 'c', 'd', 'e')),其余的保持不变
    • 顺便说一下,“缺失”的列名和行名甚至不必同名,你可以试试dimnames = list(c('a', 's', 'c', 'd', 'e'), c('a', 'f', 'c', 'd', 'e'))
    猜你喜欢
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    相关资源
    最近更新 更多