从数据帧 R 创建加权邻接矩阵

create weighted adjacency matrix from data frame R

我有如下方式的数据框

dat <- data.frame(A=c("D", "A", "D", "B"), B=c("B", "B", "D", "R"), C=c("A", "D", "C", ""), D=c("D", "C", "A", "A"))

我的想法是根据每个列变量引用其他列的次数(并在引用不在其中一列中的其他内容时忽略(例如 "R"))。所以我想填充以下矩阵:

n <- ncol(dat)
names_d <- colnames(dat)
mat <- matrix(0, nrow=n, ncol=n)
rownames(mat) <- names_d
colnames(mat) <- names_d

所以最后,我会有这样的事情:

  A B C D
A 1 1 0 2
B 0 2 0 1
C 1 0 1 1
D 2 0 1 1

在 R 中哪种方法最有效?

您可以试试下面的代码

> t(sapply(dat, function(x) table(factor(x, levels = names(dat)))))
  A B C D
A 1 1 0 2
B 0 2 0 1
C 1 0 1 1
D 2 0 1 1

> t(xtabs(~., subset(stack(dat), values != "")))
   values
ind A B C D
  A 1 1 0 2
  B 0 2 0 1
  C 1 0 1 1
  D 2 0 1 1

另一种选择是 stacktable

 table(subset(stack(dat), nzchar(values) & values != 'R'))