2017-02-15 32 views
0

У меня есть двупартийная сеть соавторов с исследователями и их дочерними учреждениями. У учреждений есть атрибут вершины, обозначающий их страну (в стране V (sg) $). Я хотел бы скопировать этот атрибут каждому исследователю, связанному с узлом, так что «a» будет иметь «страну» атрибут «Китай», а «e» будет иметь «US» в приведенном ниже примере:Копирование/установка атрибута вершины соседних вершин в двудольном графе

link to graph

Кроме того, некоторые из исследователей перешли в учреждения других стран на протяжении всей своей карьеры и, таким образом, связаны с несколькими учреждениями. В таких случаях было бы идеально, если бы они получили свой атрибут от стран, которые чаще всего находятся по соседству (например: «c» получит «Китай», а не «Франция».

Я очень новичок в кодировании , и это мой первый вопрос здесь, так что я заранее извиняюсь за свои noobish способами

Возпроизводимо пример

library(igraph) 

set.seed(1) 
sg<-sample_bipartite(10, 5, p=.3) 

countries<-c("US","France","China") 
V(sg)[type=="TRUE"]$country<-sample(countries,replace=TRUE,5) 

V(sg)[type=="FALSE"]$label <- c("a","b","c","d","e","f","g","h","i","j") 
V(sg)[type=="TRUE"]$label <- V(sg)[type=="TRUE"]$country 
V(sg)$color[1:10] <- rgb(0,1,0,.5) 
V(sg)$color[11:15] <- rgb(1,0,0,.5) 
plot(sg) 
+1

неясно, что вы» re aski нг. Можете быть более конкретными? Обычно вы получите больше/лучших ответов, если задаете небольшой, ограниченный вопрос - неопределенные «как это сделать», как правило, не получают ответов. –

+0

Возможно, вы могли бы просто уточнить желаемый результат ввода этого образца. Вы хотите добавить новый атрибут, что все узлы с 'type ==" TRUE ", которые содержат наиболее распространенную страну, к которой они подключены? Что происходит в случае галстука (т. Е. 'D')? – MrFlick

ответ

0

Вот один из способов сделать это:.

library(igraph) 

set.seed(1) 
sg<-sample_bipartite(10, 5, p=.3) 

countries<-c("US","France","China") 
V(sg)[type=="TRUE"]$country<-sample(countries,replace=TRUE,5) 

V(sg)[type=="FALSE"]$label <- c("a","b","c","d","e","f","g","h","i","j") 
V(sg)[type=="TRUE"]$label <- V(sg)[type=="TRUE"]$country 
V(sg)$color[1:10] <- rgb(0,1,0,.5) 
V(sg)$color[11:15] <- rgb(1,0,0,.5) 
plot(sg) 


idx <- V(sg)$type==0 
res <- lapply(ego(sg, idx, order = 1), function(x) 
    names(tail(sort(table(V(sg)$country[x[-1]])), 1)) 
) 
V(sg)$country[idx] <- res 
unlist(V(sg)$country[V(sg)$label=="a"]) 
# [1] "China" 
unlist(V(sg)$country[V(sg)$label=="e"]) 
# [1] "US" 
unlist(V(sg)$country[V(sg)$label=="c"]) 
# [1] "China" 
+0

Вот и все! Спасибо! – samitakamaki