[英]igraph - convert vector of nodes into dataframe of all possible edges in R
我正在R中處理網絡圖,需要做一個簡單的數據操作。 我有一個看起來像這樣的節點的數據框:
dput(mynodes)
structure(list(id = c("s1", "s2", "s3", "s4", "s5", "s6", "s7",
"s8"), name = c("Jim", "Mike", "Bob", "Joe", "John", "Rob", "Kyle",
"Chad")), .Names = c("id", "name"), row.names = c(NA,
-8L), class = "data.frame")
mynodes
id name
1 s1 Jim
2 s2 Mike
3 s3 Bob
4 s4 Joe
5 s5 John
6 s6 Rob
7 s7 Kyle
8 s8 Chad
我想為這些節點之間所有可能的邊緣組合初始化一個數據框。 然后,我需要的輸出是一個如下所示的數據框:
from to
1 s1 s2
2 s1 s3
3 s1 s4
4 s1 s5
5 s1 s6
6 s1 s7
7 s1 s8
8 s2 s1
9 s2 s3
10 s2 s4
... ... ...
依此類推,一直到mynodes的ID唯一配對。 有沒有一種簡單的方法可以執行此操作,可能使用igraph包(因為我將使用igraph中的graph_from_data_frame函數創建一個網絡)。
任何幫助表示贊賞,謝謝!
如果您想節省幾行
df <- structure(list(id = c("s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8"), name = c("Jim", "Mike", "Bob", "Joe", "John", "Rob", "Kyle", "Chad")), .Names = c("id", "name"), row.names = c(NA, -8L), class = "data.frame")
result <- as.data.frame(t(combn(df$id,2)))
colnames(result) <- c('from','to')
我會在這里快速回答自己的問題,因為我自己知道了:
data.frame(from = rep(mynodes $id, each = length(mynodes $id)),
to = rep(mynodes $id, times = length(mynodes $id)),
stringsAsFactors = FALSE) %>%
filter(to != from)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.