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

标签 r matrix data-manipulation missing-data

我有两个方阵,它们都有一些缺失的数据。我想在两个矩阵中用 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

关于r - 用 NA 填充两个矩阵的缺失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73838452/

相关文章:

python - 是否可以将 Pandas 日期时间转换为工作日/周末和季节?

r - 使用 lazyeval 进行 mutate 的标准评估

python - 初始化 numpy 矩阵中的对象

c++ - 父类成员函数使用子类c++的实例

clojure - clojure 中的矩阵转置

r - 使用 dplyr 计算数据列中的 "streaks"

r - 将多个数据帧列映射到 R 中的百分位值时处理 NA

r - PROC NLIN 从 SAS 到 R

重新排序因子水平以在多面包裹条形图中正确显示

r - 如何在 R 中将字符串计算为变量?