r - 对部分重叠的方阵/数组求和
问题描述
我有两个这样的方阵/数组
## Matrix 1
t1 <- c(2,1,1,1,1,0,1,0,1)
column.names <- c("A","B","C")
row.names <- c("A","B","C")
m1 <- array(t1,dim = c(3,3),dimnames = list(row.names,column.names))
m1
A B C
A 2 1 1
B 1 1 0
C 1 0 1
## Matrix 2
t2 <- c(1,0,0,0,1,1,0,1,1)
column.names <- c("A","B","D")
row.names <- c("A","B","D")
m2 <- array(t2,dim = c(3,3),dimnames = list(row.names,column.names))
m2
A B D
A 1 0 0
B 0 1 1
D 0 1 1
我需要总结它们(每个现有的列/行对)并保留所有可能的组合,例如:
A B C D
A 3 1 1 0
B 1 2 0 1
C 1 0 1 0
D 0 1 0 1
我必须多次计算这个过程,所以我正在寻找一种快速且轻量级的解决方案。
任何帮助都会很糟糕,我被卡住了;)
解决方案
使用xtabs
+的基本 R 选项expand.grid
as.data.frame.matrix(
xtabs(
p ~ .,
do.call(
rbind,
lapply(
list(m1, m2),
function(x) cbind(expand.grid(dimnames(x)), p = c(x))
)
)
)
)
给
A B C D
A 3 1 1 0
B 1 2 0 1
C 1 0 1 0
D 0 1 0 1
另一种选择使用igraph
library(igraph)
get.adjacency(
graph_from_data_frame(
do.call(
rbind,
lapply(
list(m1, m2),
function(x) {
get.data.frame(
graph_from_adjacency_matrix(
x,
"undirected"
)
)
}
)
), FALSE
),
sparse = FALSE
)
这使
A B C D
A 3 1 1 0
B 1 2 0 1
C 1 0 1 0
D 0 1 0 1
推荐阅读
- python - 遍历目录的文件夹并在python中的每个文件夹之后创建一个输出
- c# - c# 将 WPF 与在线数据库连接
- c# - 在两个类实例之间动态复制某些属性
- javascript - 重音符号在 IE 中显示错误
- asp.net - How to hide all year in datepicker except a year before today in ext.net
- gnuplot - Gnuplot - xtics 不同于网格
- c# - Why is OnLevelWasLoaded () called twice and why are my variable's values different in each call?
- javascript - math.js Uncaught TypeError: v is not a function with p5
- azure - Azure 存储模拟器的 Docker 映像 - nginx 错误
- ios - 使用委托和协议的集合视图单元格操作