准备邻接矩阵 - 填充缺失的链接

问题描述 投票:0回答:1

我有一个这种结构的数据框:

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

其中 A、B、C 和 D 是我的网络的单位。我的问题是,我有一个链接 A -> B,但没有 B -> A,这只是没有记录在我拥有的数据中。例如,也是 B -> D,但不是 D -> B。我想操纵这个数据框(或者矩阵),以便每个链接都显示在每一列中。数据框应该如下所示:

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

在我的原始数据中,我有大约 68.000 个单位(列)和大约 30 个记录的(一侧)链接(行)。所以我的数据框现在非常大,我无法检查每个链接是否实际上被记录了两次(即 B 存在于 A 列中,但 A 不存在于 B 列中等等)。请记住,实际上有可能在某些情况下两个链接都已记录,我无法确定。

我希望我能清楚地表达我的问题。我很高兴有任何有用的想法。

提前致谢

r matrix adjacency-matrix
1个回答
0
投票

这是基本 R 的一种解决方案:

B <- sapply(seq_along(A), function(i){
  name <- names(which(colSums(A == names(A)[i], na.rm = TRUE) > 0))
  A[[i]][head(which(is.na(A[i])), length(name))] <- name
  sort(A[[i]], na.last = TRUE)
})

setNames(data.frame(B), names(A))

     A    B    C    D
1    B    A    B    A
2    D    C <NA>    B
3 <NA>    D <NA> <NA>
4 <NA> <NA> <NA> <NA>
© www.soinside.com 2019 - 2024. All rights reserved.