r-用NA填充两个矩阵的缺失数据



我有两个正方形矩阵,其中两个矩阵都缺少一些数据。我想在两个矩阵中用NA填充缺失的数据

以下数据:

#first matrix
t1 = matrix(
c(1, 0, 1, 0, 0, 1, 1, 0, 1),
nrow = 3,  
ncol = 3,        
byrow = TRUE         
)
rownames(t1) <- c("a","b", "c")
colnames(t1) <- c("a","b", "c")
#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") 
colnames(t2) <- c("a","c", "d")
#Expected outcome for the two matrices:
#first matrix
a  b  c  d
a 1  0  1  NA
b 0  0  1  NA
c 1  0  1  NA
d NA NA NA NA
#second matrix
a  b  c  d
a 1  NA 1  0
b NA NA NA NA
c 0  NA 0  1
d 0  NA 0  1

我该如何做到这一点?优选的结果是包含这两个NA填充矩阵的列表

如果每个矩阵中的行和列名始终相同(此处没有硬编码的行/列名(:

nam <- union(rownames(t1), rownames(t2))
m <- array(dim=rep(length(nam), 2),
dimnames=list(nam, nam))
lapply(list(t1, t2), function(x) {
m[rownames(x), colnames(x)] <- x
m
})
# [[1]]
#    a  b  c  d
# a  1  0  1 NA
# b  0  0  1 NA
# c  1  0  1 NA
# d NA NA NA NA
# 
# [[2]]
#    a  b  c  d
# a  1 NA  1  0
# b NA NA NA NA
# c  0 NA  0  1
# d  0 NA  0  1

您可以使用match来查找匹配的列和行,否则它将添加具有NA的列或行。使用lapply对每个矩阵执行运算,以生成列表形式的结果。您可以使用以下代码:

l <- list(t1, t2)
lapply(l, (x) {
# Your required columns and rows names
colrown=c("a","b","c","d")
# columns part
coln=colnames(x)
x=x[,match(colrown,coln)]
colnames(x)=colrown
# Rows part
rown=rownames(x)
x=x[match(colrown,rown),]
rownames(x)=colrown
return(x)
})
#> [[1]]
#>    a  b  c  d
#> a  1  0  1 NA
#> b  0  0  1 NA
#> c  1  0  1 NA
#> d NA NA NA NA
#> 
#> [[2]]
#>    a  b  c  d
#> a  1 NA  1  0
#> b NA NA NA NA
#> c  0 NA  0  1
#> d  0 NA  0  1

创建于2022-09-24,reprex v2.0.2


数据

#first matrix
t1 = matrix(
c(1, 0, 1, 0, 0, 1, 1, 0, 1),
nrow = 3,  
ncol = 3,        
byrow = TRUE         
)
rownames(t1) <- c("a","b", "c")
colnames(t1) <- c("a","b", "c")
#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") 
colnames(t2) <- c("a","c", "d")
t1
#>   a b c
#> a 1 0 1
#> b 0 0 1
#> c 1 0 1
t2
#>   a c d
#> a 1 1 0
#> c 0 0 1
#> d 0 0 1

最新更新