我想通过制作2个数据帧在R中制作有向图:一个用于顶点,一个用于边。此外,我的图表应该具有以下属性:
我想出了如下代码:
library(dplyr)
USER_BASE <- 1:100
MAXIMUM_USER_RELATIONSHIP = length(USER_BASE)*4
my_random <- function(vector, size, replace, seed)
{
set.seed(seed)
return(sample(vector, size = size, replace = replace))
}
user <- data.frame(
id = USER_BASE
)
relationship <- data.frame(
from = my_random(USER_BASE, MAXIMUM_USER_RELATIONSHIP, replace = TRUE, 1),
to = my_random(USER_BASE, MAXIMUM_USER_RELATIONSHIP, replace = TRUE, 2)
) %>% filter(from != to) %>% unique()
我的代码仍然允许2个节点之间的2条边(A - > B和B - > A)。我怎么能在A和B之间只实现一条边?
亲切的问候
编辑:我找到了一个解决方案来自: Unique rows, considering two columns, in R, without order
我的完整代码:
library(dplyr)
library(data.table)
USER_BASE <- 1:100
MAXIMUM_USER_RELATIONSHIP = length(USER_BASE)*4
my_random <- function(vector, size, replace, seed)
{
set.seed(seed)
return(sample(vector, size = size, replace = replace))
}
user <- data.frame(
id = USER_BASE
)
relationship <- data.frame(
from = my_random(USER_BASE, MAXIMUM_USER_RELATIONSHIP, replace = TRUE, 1),
to = my_random(USER_BASE, MAXIMUM_USER_RELATIONSHIP, replace = TRUE, 2)
) %>% filter(from != to) %>% unique()
relationship <- unique(as.data.table(relationship)[, c("from", "to") := list(pmin(from, to),
pmax(from, to))], by = c("from", "to"))
答案 0 :(得分:0)
您可以使用anti_join
删除反转版本中存在的所有行。
reverse <- data.frame(to = relationship$from, from = relationship$to)
anti_join(relationship, reverse)