0

パブリケーションネットワークを介してコラボレーションをネットワーク化しようとしています。それに最適なigraphを使用しました。ただし、頂点(ネットワーク内で自分を表す頂点)からすべての共著者までのエッジがあるため、グラフがかなり詰まっています。別の作成者を介してのみ関連している一部の作成者の頂点からエッジを削除したいと思います。基本的に、私が共同執筆しているだけの著者。とにかく、私はこれらの頂点を識別し、自分の頂点を知っています。現在、このエッジのセットを自分だけにリンクしているエッジを削除する方法が見つかりません。

より一般的には、V(g)[a]とV(g)[b]などの2つのベクトルグループからエッジをどのように削除しますか?

ありがとう、

ここに例があります:

au1 <- c('deb', 'art', 'deb', 'seb', 'deb', 'deb', 'mar', 'mar', 'joy', 'deb')
au2 <- c('art', 'deb', 'soy', 'deb', 'joy', 'ani', 'deb', 'deb', 'nem', 'mar')
au3 <- c('mar', 'lio', 'mil', 'mar', 'ani', 'lul', 'nem', 'art', 'deb', 'tat')


tata <- data.frame(au1, au2, au3)
xaulist2 <- levels(factor(unlist(tata[,])))
xaulist <- levels(as.factor(xaulist2))
xaulist_att <- c(rep('prime', 2), 'main', 'second', 'second', rep('prime', 3), 'second', rep('prime', 3))
au_att <- data.frame(au_name=xaulist, level=xaulist_att)

# matrix list preparation
tutu <- matrix(NA, nrow=length(xaulist), ncol=dim(tata)[1]) # row are authors and col are papers
for (i in 1:length(xaulist))
{
  for (j in 1:dim(tata)[1])
  {
  ifelse('TRUE' %in% as.character(tata[j,]==xaulist[i]), tutu[i,j] <- 1,  tutu[i,j] <- 0)
  }
}
tutu[is.na(tutu)] <- 0

tutu[tutu>=1] <- 1 # change it to a Boolean matrix
termMatrix <- tutu %*% t(tutu)

# build a graph from the above matrix
g <- graph.adjacency(termMatrix, weighted=T, mode = 'undirected')
g <- simplify(g) # remove loops
V(g)$label <- xaulist # set labels of vertices
V(g)$degree <- degree(g) # set degrees of vertices
V(g)[xaulist_att=='second']$color <- 'red'
V(g)[xaulist_att=='main']$color <- 'blue'
set.seed(112) # set seed to make the layout reproducible
plot(g)

では、問題は、属性「second」を持つ作成者から属性「main」を持つ作成者、つまり赤いものから青いものへのエッジをどのように削除するかということです。

再度、感謝します、

4

2 に答える 2

5

これを行う1つの方法は、非常に読みやすいと考えています。

g2 <- delete.edges(g, E(g)[ V(g)[xaulist_att == 'second'] %--% 
                            V(g)[xaulist_att == 'main'  ] ])

## plot the results
coords <- layout.auto(g)
layout(rbind(1:2))
plot(g, layout=coords, main="g")
plot(g2, layout=coords, main="g2")

詳細?iteratorsはをご覧ください。

于 2013-01-13T15:37:24.300 に答える
1

再現可能な例がなければ、私はあなたが何を望んでいるかを理解しているかどうかわかりません。しかし、これはあなたを助けるはずです:

##deletes from g edge 1->2.
g <- delete.edges(g, E(g, P=c(1,2))) 
于 2013-01-13T09:17:46.140 に答える