【问题标题】:How to find networks within a data frame? [duplicate]如何在数据框中找到网络? [复制]
【发布时间】:2016-02-02 00:01:13
【问题描述】:

如果我有一个包含两个 ID 列 AB 的数据框,其中每个观察代表一条边(两个 ID 之间的连接),那么确定所有不相交 ID 组的最佳方法是什么? ID 可以出现在任一列中并且可以重复。

举例来说,这是一个测试数据框以及我期望的结果:

df <- data.frame(A = rep(1:5, 2), B = c(3, 7:15))
#    A  B
#    1  3
#    2  7
#    3  8
#    4  9
#    5 10
#    1 11
#    2 12
#    3 13
#    4 14
#    5 15

# Proposed results
# Each element of the list represents a unique group
# [[1]]
# [1]  1  3  8 11 13
# 
# [[2]]
# [1]  2  7 12
# 
# [[3]]
# [1]  4  9 14
# 
# [[4]]
# [1]  5 10 15

【问题讨论】:

标签: r graph nodes


【解决方案1】:

这是我提出的解决方案,考虑到问题相对简单,我发现它有点过头了:

library(magrittr)

find_relationships <- function(known_nodes, d){
  # takes a vector of ids, known_nodes, and data consist of ids, d
  subset(d, A %in% known_nodes | B %in% known_nodes) %>%
    unlist %>%
    c(known_nodes) %>%
    unique -> new_nodes

  if(length(new_nodes) == length(known_nodes)){
    return(new_nodes)
  }
  else{
    Recall(new_nodes, d)
  }
}

unique_ids <- unique(c(df$A, df$B))

results <- lapply(unique_ids, find_relationships, d = df) %>% unique

【讨论】:

    猜你喜欢
    • 2021-12-06
    • 2021-04-26
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多