我有一个具有相对较大的行名和列名的空白矩阵(6000乘以200).然后,我有多个矩阵,它们表示这个矩阵的子集(通常大约是1500乘以120),还包含行名和列名.我想根据行/列名的组合将给定子集中单元格的信息插入到空白矩阵中.

以下是数据和所需输出的示例:

adj1 <- matrix(0, 3, 4)
colnames(adj1) <- c("g1", "g2", "g3", "g4")
rownames(adj1) <- c("Tim", "John", "Sarah")

adj2 <- matrix(0, 2, 2)
colnames(adj2) <- c("g1", "g4")
rownames(adj2) <- c("Tim", "John")
adj2[1,2] <- 1
adj2

combined_adj <- matrix(0,3,4)
colnames(combined_adj) <- c("g1","g2","g3","g4")
rownames(combined_adj) <- c("Tim","John", "Sarah")
combined_adj[1,4] <- 1
combined_adj

我在某种程度上设法通过列名进行了交集,但不是通过行/列名称的确切组合.

推荐答案

Here is a function that allows you to replace values by row and column names.
Its arguments are

  • x矩阵越大;
  • y具有新值的矩阵;
  • z目标矩阵;如果缺少,将创建一个新的零矩阵,其维度和行/列名称为x.
matreplace <- function(x, y, z){
  if(missing(z)) {
    z <- x
    z[] <- 0
  }
  ij <- Map(intersect, dimnames(z), dimnames(y))
  i <- ij[[1L]]
  j <- ij[[2L]]
  z[i, j] <- y[i, j]
  z
}

adj1 <- matrix(0, 3, 4)
colnames(adj1) <- c("g1", "g2", "g3", "g4")
rownames(adj1) <- c("Tim", "John", "Sarah")

adj2 <- matrix(0, 2, 2)
colnames(adj2) <- c("g1", "g4")
rownames(adj2) <- c("Tim", "John")
adj2[1,2] <- 1

combined_adj <- matreplace(adj1, adj2)

adj2[2, 1] <- pi
matreplace(adj1, adj2, combined_adj)
#>             g1 g2 g3 g4
#> Tim   0.000000  0  0  1
#> John  3.141593  0  0  0
#> Sarah 0.000000  0  0  0

创建于2023-05-07年第reprex v2.0.2

R相关问答推荐

R根据名称的载体对收件箱列采取行动

在之前合并的数据.tables中分配新列后.internal.selfref无效

在Julia中调用R函数

使用scale_x_continuous复制ggplot 2中的离散x轴

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

在特定列上滞后n行,同时扩展框架的长度

更改绘图上的x轴断点,而不影响风险?

如何 bootstrap glm回归、估计95%置信区间并绘制它?

R Highcharts与两个位置关联的注释

如何在ggplot中标记qqplot上的点?

当我们有多个特殊字符时,使用gsub删除名称和代码'

使用`Watch()`和`renderUI()`时,不再满足仍出现在SHILINY AFTER条件中的条件输入

从多个线性回归模型中提取系数

按多列统计频次

将选定的索引范围与阈值进行比较

在R中创建连续的期间

如何将一个方阵分解成没有循环的立方体

向R中的数据帧添加一列,该列统计另一列中每个唯一值的二进制观测值的数量

随机将数据帧中特定列上的某些行设置为NA

如何使用grepl()在数据帧列表中 Select 特定字符串?