从数据帧 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
另一种选择是 stack
和 table
table(subset(stack(dat), nzchar(values) & values != '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
另一种选择是 stack
和 table
table(subset(stack(dat), nzchar(values) & values != 'R'))