Я работаю с сетевыми данными и наткнулся нечетной (или, по крайней мере, я не ожидал) поведение с count.multiple
в igraph
пакете в R.трудно понять count.multiple и упростить в igraph
library(igraph)
library(plyr)
df <- data.frame(sender = c("a", "a", "a", "b", "b", "c","c","d"),
receiver = c("b", "b", "b", "c", "a", "d", "d", "a"))
То, что я хочу, это подсчет всех краев и использование мультипликаторов в качестве веса.
когда я ddply(df, .(sender, receiver), "nrow")
мои результаты:
sender receiver nrow
1 a b 3
2 b a 1
3 b c 1
4 c d 2
5 d a 1
Что я и следовало ожидать.
Однако, я не могу воспроизвести это с помощью igraph-х count.multiple
, что то, что я ожидал, чтобы сделать это в igraph
df.graph <- graph.edgelist(as.matrix(df))
E(df.graph)$weight <- count.multiple(df.graph)
E(df.graph)$weight
производит:
3 3 3 1 1 2 2 1
Затем я использовал команду simplify
:
df.graph <- simplify(df.graph)
, который pr oduces
9 1 1 4 1
я получаю то, что здесь происходит, упрощать только добавляет веса, но я не понимаю, почему/когда это будет использоваться, в отличие от того, что ddply
делает ..?
Любые мысли?
Спасибо!
так что 'count.multiple', то' simplify' является избыточным? – crock1255
Да: в примере 'count.multiple' присваивает вес 3 краям a → b, но их еще три; 'simplify' затем добавляет эти веса, в результате чего общий вес составляет 9. В итоге мы получаем квадрат нужного веса. –
Отлично. Спасибо, что поняли! – crock1255