我正在使用Walktrap社区检测方法返回一个数字(在本例中为19)的簇。我有一个属于这些集群中的一个或多个的成员列表。
我需要一种方法来搜索每个群集中是否存在 成员并返回找到的匹配百分比。 (例如簇[0] = 0%,cluster [1] = Y%..... cluster [18] = Z%)因此选择代表列表成员的最佳聚类。
找到最佳群集后,我需要一种方法来计算 最佳集群的成员数量和原始集群的成员数量 (19-1)簇选择另一个最接近的簇 (成员人数)
library(igraph)
edges <- read.csv('http://dl.dropbox.com/u/23776534/Facebook%20%5BEdges%5D.csv')
list<-read.csv("http://dl.dropbox.com/u/23776534/knownlist.csv")
all<-graph.data.frame(edges)
summary(all)
all_wt<- walktrap.community(all, steps=6,modularity=TRUE,labels=TRUE)
all_wt_memb <- community.to.membership(all,all_wt$merges,steps=which.max(all_wt$modularity)-1)
all_wt_memb$csize
>[1] 176 13 204 24 9 263 16 2 8 4 12 8 9 19 15 3 6 2 1
答案 0 :(得分:1)
使用%in%
函数时,如:a %in% b
将确定向量a
中的哪些元素也存在于向量b
中。所以对于每个集群,我会
%in%
此群集 - 这将返回一个布尔向量sum()
来计算真实元素的数量(即初始向量中存在于此群集中的元素数量您可以使用for()
或apply
变体循环遍历每个群集。
然后给定all_wt_memb$csize
,您将拥有一个给定的值,这是您的目标,并且您将要查找最接近的数字。请参阅this link,但您只是计算最小绝对差值:
x=c(1:100)
your.number=5.43
which(abs(x-your.number)==min(abs(x-your.number)))
答案 1 :(得分:0)
这将为您提供第二大all_wt_memb的索引:
dat <- all_wt_memb$csize
order( dat- dat[which.max(dat)])[ length(dat)-1]
[1] 3