我创建了一个具有一些节点和边缘的网络。
g <- graph.formula(4506-8974, 8974-6345, 7842-4653, 4653-6345, 7842-8974)
V(g)$name <- c("4506", "8974", "6345", "7842", "4653")
我对让节点具有基于我的初始dataframe
的关键字属性感兴趣。其中V(g)$keyword
显示节点的关键字。我的数据框采用矩阵的形式,其中行是节点,列是关键字。请参见下面的示例。
df <- data.frame("agriculture" = c(1,1,0,0,0), "arts" = c(0,0,0,1,0), "banks" = c(1,0,1,0,0),
"cities" = c(0,0,0,1,0), "companies" = c(0,0,0,0,1))
rownames(df) <- c("4506", "8974", "6345", "7842", "4653")
NodeID agriculture arts banks cities companies
4506 1 0 1 0 0
8974 1 0 0 0 0
6345 0 0 1 0 0
7842 0 1 0 1 0
4653 0 0 0 0 1
因此,我应用了以下代码行来创建属性。到目前为止一切正常。
V(g)$keyword <- apply(df, 1, function(x) names(df)[x == 1])
V(g)$keyword[1]
#[1] "agriculture" "banks"
V(g)$keyword[2]
#[2] "agriculture"
但是,我的问题是尝试根据该特定属性为节点着色时。假设我要为具有关键字“农业”的节点着色。该图仅将节点“ 8974”涂成红色,因为节点“ 4506”关键字属性采用“农业”和“银行”均为关键字的列表形式。因此,它不考虑它。如何更改代码,使ifelse
函数也出现在列表中?
V(g)$color <- ifelse(V(g)$keyword == "agriculture", "red", "blue")
plot(g)