为数据点连接器创建条件R.

时间:2014-09-08 17:27:53

标签: r if-statement conditional-statements igraph

这是我的初始数据

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号。最后没有被表征的人应该被称为追随者。

  • Root:写入无NULL
  • Starter:Value&gt; X
  • 连接器:连接启动器(始终只有一种连接方式)
  • 追随者=休息

这里的一些代码

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)

enter image description here

1 个答案:

答案 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)