这是我的初始数据
library(igraph)
From <- c(1,2,3,4,5,6,7,8)
To <- c("NULL",1,2,3,2,"NULL",6,7)
Value<-c(4,2,2,7,1,2,7,2)
Data <- data.frame(From,To,Value)
Network <- graph.data.frame(Data[,c("From","To")],directed=TRUE)
Network<- Network - "NULL"
plot(Network)
我想创建一个添加Datapoints特征的条件。 到目前为止,我能够创建第一和第二度条件,但我无法找到关于如何创建第三个条件以完成整个构造的解决方案。 我能够为Root和Starter创建条件,我的问题是如何构建Starters连接器的条件。在这种情况下,连接器应该是2号和3号。最后没有被表征的人应该被称为追随者。
这里的一些代码
cond<-Data$To=="NULL"
ToP<-ifelse(cond,"Root","Follower")
cond<-Data$Value>3
ToP<- ifelse(cond,"Starter",ToP)
NewData<-cbind(Data,ToP)
View(NewData)
我的FinalData应该看起来像这样:
From <- c(1,2,3,4,5,6,7,8)
To <- c("NULL",1,2,3,2,"NULL",6,7)
Value<-c(4,2,2,7,1,2,7,2)
ToP<-c(Starter,Connector,Connector,Starter,Follower,Root,Starter,Follower)
Data <- data.frame(From,To,Value, ToP)
答案 0 :(得分:1)
它仍然比我想要的有点麻烦,这似乎是为顶点分配正确的标签
V(Network)$ToP <- ifelse(Data$To=="NULL","Root","Follower")
V(Network)$ToP[Data$Value>3] <- "Starter"
vs <- V(Network)[ToP=="Starter"]
sp <- shortest.paths(Network, vs,vs)
cx <- which(is.finite(sp) & lower.tri(sp), arr.ind=T)
for(i in nrow(cx)) {
pp <- get.shortest.paths(Network, c(vs)[cx[i,1]], c(vs)[cx[i,2]])
fidx <- tail(head(pp$vpath[[1]], -1), -1)
if(length(fidx)>0) {
V(Network)[fidx]$ToP<-"Connector"
}
}
#verify with plot
V(Network)$color <- as.numeric(factor(V(Network)$ToP))+1
plot(Network)
legend(.5, -.5, levels(factor(V(Network)$ToP)), col=2:5, pch=20)