我有多个矩阵反映了不同时间点的两党/从属关系网络.这些矩阵在其现任成员中有许多重叠之处,但也有许多差异.然而,为了进一步分析,我需要它们具有相同的维度,并且每行/列具有相同的参与者,因此我需要以某种方式组合行名和列名.

最终的矩阵将大约是8000乘以200,但每个单独的矩阵大约是2000乘以150.下面是两个矩阵的示例,以及我希望结果是什么样子:

adj1 <- matrix(0, 3, 5)
colnames(adj1) <- c("g1", "g2", "g3", "g5", "g6")
rownames(adj1) <- c("Tim", "John", "Sarah")

adj2 <- matrix(0, 4, 2)
colnames(adj2) <- c("g1", "g4")
rownames(adj2) <- c("Tim", "Mary", "John", "Paolo")

combined_adj <- matrix(0,5,6)
colnames(combined_adj) <- c("g1","g2","g3","g4","g5","g6")
rownames(combined_adj) <- c("John","Mary","Paolo","Sarah","Tim")

理想情况下,新的单元格应该是"NA"或"10",行和列应该按字母顺序排序.需要保留每个矩阵中的初始值.我不知道在这里该做什么,感谢大家的帮助!

推荐答案

您可以使用Merge并指定也要使用row.names进行合并.

combined_adj <- merge(x = adj1,
      y = adj2,
      by = c('row.names', 
             intersect(colnames(adj1), 
                       colnames(adj2))
             ), 
      all = TRUE
)
combined_adj
  Row.names g1 g2 g3 g5 g6 g4
1      John  0  0  0  0  0  0
2      Mary  0 NA NA NA NA  0
3     Paolo  0 NA NA NA NA  0
4     Sarah  0  0  0  0  0 NA
5       Tim  0  0  0  0  0  0

这会将其转换为data.Frame,因此如果需要,您需要将其转换回矩阵.

row.names(combined_adj) <- combined_adj[,1]
combined_adj <- combined_adj[,-1]

编辑:合并多个矩阵

我们使用Reduce将其应用于所有矩阵.但是,我们首先将其转换为data.Frame,并创建一个包含ROW_NAMES的列以简化操作.

# create sample data
adj1 <- matrix(
  0, 3, 5,
  dimnames = list(c("Tim", "John", "Sarah"), 
                  c("g1", "g2", "g3", "g5", "g6"))
)

adj2 <- matrix(
  0, 4, 2, 
  dimnames = list(c("Tim", "Mary", "John", "Paolo"),
                  c("g1", "g4"))
)

adj3 <- matrix(
  0, 3, 3, 
  dimnames = list(c("Tim2", "Mary2", "John"), c("g1", "g4", 'g7'))
)

# create a list 
list_matrices <- list(adj1, adj2, adj3)

# convert to dataframes and create a column with row.names
list_matrices <- lapply(list_matrices, function(mat){
  mat <- as.data.frame(mat)
  mat$row_names <- row.names(mat)
  mat
})

# successively combine them, merge 1..2 and then merge result with 3 and so on
res <- Reduce(function(mat1, mat2) merge(mat1, mat2, all = TRUE), x = list_matrices)

res
  g1 row_names g4 g2 g3 g5 g6 g7
1  0      John  0  0  0  0  0  0
2  0      Mary  0 NA NA NA NA NA
3  0     Mary2  0 NA NA NA NA  0
4  0     Paolo  0 NA NA NA NA NA
5  0     Sarah NA  0  0  0  0 NA
6  0       Tim  0  0  0  0  0 NA
7  0      Tim2  0 NA NA NA NA  0

R相关问答推荐

了解.groups的目的= dØr的摘要功能中的删除

插入指示行之间时间间隔的新行

通过绘图 Select 线串几何体并为其着色

根据固定值范围在tible中添加新行

如果行和列名以相同的开头,将矩阵值设置为0

geom_Ribbon条件填充创建与数据不匹配的形状(ggplot 2 r)

从嵌套列表中智能提取线性模型系数

如何对数据集进行逆向工程?

有没有一个R函数允许你从一个数字变量中提取一个数字,而不考虑它的位置(不仅仅是第一个或最后一个数字?

用黄土法确定区间

使用tidy—select创建一个新的带有mutate的摘要变量

移除仪表板Quarto中顶盖和车身之间的白色区域

仅 Select 超过9行的CSV文件

更改STAT_VALLES/STAT_PEAKS中的箭头线宽/大小

如何在R中通过多个变量创建交叉表?

在多页PDF中以特定布局排列的绘图列表不起作用

根据另一列中的值和条件查找新列的值

使用列中的值来调用函数调用中应使用的其他列

将文本批注减少到gglot的y轴上的单个值

R将函数参数传递给ggploy