在基于另一个矩阵的 NA 矩阵中填充缺失数据

Pad missing data in a matrix with NA based on another matrix

提问人:cliu 提问时间:9/24/2022 更新时间:9/24/2022 访问量:23

问:

我有两个邻接矩阵,其中第二个矩阵有一些缺失的数据(这意味着这两个矩阵的正方形大小不同),但是如何在第二个矩阵中用 NA 填充缺失的数据?

数据如下:

#first matrix
t1 = matrix(
  c(1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1),
  nrow = 4,  
  ncol = 4,        
  byrow = TRUE         
)
rownames(t1) <- c("a","b", "c", "d")
colnames(t1) <- c("a","b", "c", "d")

#second matrix
t2 = matrix(
  c(1, 1, 0, 0, 0, 1, 0, 0, 1),
  nrow = 3,  
  ncol = 3,        
  byrow = TRUE         
)
rownames(t2) <- c("a","c", "d") #assume data from b are missing here
colnames(t2) <- c("a","c", "d")

第二个矩阵的预期成果:

  a  b  c  d
a 1  NA 1  0
b NA NA NA NA
c 0  NA 0  1
d 0  NA 0  1

我有一个更大的数据集,因此将不胜感激@

R 矩阵 操作 数据

评论


答:

1赞 Robert Hacken 9/24/2022 #1

如果行名和列名可以信赖:

t3 <- t1
t3[] <- NA
t3[rownames(t2), colnames(t2)] <- t2

t3
#    a  b  c  d
# a  1 NA  1  0
# b NA NA NA NA
# c  0 NA  0  1
# d  0 NA  0  1

评论

0赞 cliu 9/24/2022
谢谢@Robert哈肯。简洁高效!
1赞 Robert Hacken 9/24/2022
@cliu 说到高效..我用一种更快的不同方法替换了创建新 s 矩阵的矩阵。在大多数情况下,这可能无关紧要,但在某些情况下可能无关紧要。ifelse()NA
0赞 cliu 9/24/2022
嗨@Robert哈肯对不起,我刚刚意识到我遇到的问题与此略有不同。你愿意在这里看看 stackoverflow.com/questions/73838452/ 吗......
0赞 Robert Hacken 9/25/2022
@cliu我看到你已经在那里得到了一个公认的答案,但我仍然想发布一个替代答案。