gpt4 book ai didi

r - 来自数据帧的邻接矩阵

转载 作者:行者123 更新时间:2023-12-05 00:43:13 25 4
gpt4 key购买 nike

我正在尝试将边缘列表转换为相邻矩阵。

以下是样本数据

#Sample Data
User<-c("1","1","2","3","4")
v1 <- c("b", "b", "a", "d", "c")
v2 <- c("c", "d", "c", "a", "a")
v3 <- c(0, 0, "d", 0, "b")
v4 <- c(0, 0, 0, 0, 0)
v5 <- c(0, 0, 0, 0, 0)

my_data<-data.frame(User, v1, v2, v3, v4, v5)
my_data

如果你运行这段代码,你会得到下面的输出,

  User v1 v2 v3 v4 v5
1 b c 0 0 0
1 b d 0 0 0
2 a c d 0 0
3 d a 0 0 0
4 c a b 0 0

使用数据,我想创建一个如下所示的相邻矩阵:

   a  b  c  d
a 0 0 2 2
b 0 0 1 1
c 2 1 0 1
d 2 1 1 0

基本上,所需的输出显示了每对出现在样本数据帧的 v1~v5 列中的次数。

我尝试使用 dils 库中的 AdjacencyFromEdgelist 函数,还尝试使用 NA 创建矩阵外壳并通过循环遍历数据框来填充矩阵。

但是,我无法工作。

最佳答案

我认为这可能与您的想法很接近。在超过 2 个顶点的行中,我考虑了每个现有的对:

library(igraph)

do.call(rbind, my_data[-1] |>
apply(1, \(x) x[x != 0]) |>
lapply(\(x) t(combn(x, m = 2)))) |>
graph_from_edgelist(directed = FALSE) %>%
as_adjacency_matrix()

4 x 4 sparse Matrix of class "dgCMatrix"
b c d a
b . 2 1 1
c 2 . 1 2
d 1 1 . 2
a 1 2 2 .

或者在基础 R 中没有 pip 运算符:

tmp <- apply(my_data[-1], 1, function(x) x[x != 0])
tmp <- do.call(rbind, lapply(tmp, function(x) t(combn(x, m = 2))))

my_graph <- graph_from_edgelist(tmp, directed = FALSE)
adj_mat <- as_adjacency_matrix(my_graph)
adj_mat

关于r - 来自数据帧的邻接矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70690378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com