2017-02-15 89 views
0

我有一个与研究人员及其附属机构合作的二分网络。这些机构有一个表示其国家的顶点属性(在V(sg)$ country中)。我想将这个属性复制到与节点连接的每个研究人员,以便“a”具有“中国”的“国家”属性,并且在下面的示例中“e”具有“美国”:将顶点属性复制/设置为二分图中的相邻顶点

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

目前还不清楚是什么你”再aski NG。你可以说得更详细点吗?通常情况下,如果你问一个小而有限的问题,你会得到更多/更好的答案 - 模糊的“我该怎么做”的问题通常不会得到答案。 –

+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

相关问题