R 如何从字符串向量构建网络
我试图创建一个R 如何从字符串向量构建网络,r,for-loop,networking,dplyr,igraph,R,For Loop,Networking,Dplyr,Igraph,我试图创建一个igraph对象,在一个特殊字符(&)上拆分字符串向量。 我使用for循环创建一个向量,并将其转换为网络图。 代码可以工作,但在很长的向量(大型网络)上效率极低 有没有办法通过管道和映射来改进流程? 提前谢谢 require(graph) data <- data.frame(nodes=c("A","A & B","C","B & C","B & D"
igraph
对象,在一个特殊字符(&)上拆分字符串向量。
我使用for循环创建一个向量,并将其转换为网络图。
代码可以工作,但在很长的向量(大型网络)上效率极低
有没有办法通过管道和映射来改进流程?
提前谢谢
require(graph)
data <- data.frame(nodes=c("A","A & B","C","B & C","B & D"))
V <- c()
for (i in 1:nrow(data)){
V_temp <- data[i,]
ifelse(grepl(" & ", data$nodes[i]),
N <- t(combn(unlist(strsplit(data$nodes[i], " & ")),2)),
N <- matrix(rep(data$nodes[i],2), nrow = 1, ncol = 2))
colnames(N) <- c("N1","N2")
V_temp <- cbind(N, V_temp, row.names = NULL)
V <- as.data.frame(rbind(V, V_temp, row.names = NULL))
}
vector <- rbind(as.vector(as.character(V$N1)),
as.vector(as.character(V$N2)))
plot(graph(vector, directed = FALSE))
require(图形)
数据如果您愿意使用dplyr
:
library(dplyr)
d <- data %>%
separate(nodes, c("from", "to") ) %>%
mutate(to = coalesce(to,from))
from to
1 A A
2 A B
3 C C
4 B C
5 B D
Warning message:
Expected 2 pieces. Missing pieces filled with `NA` in 2 rows [1, 3].
g <- graph_from_data_frame(d)
库(dplyr)
d%
分离(节点,c(“从”、“到”))%>%
突变(to=结合(to,from))
从到
A
2 A B
3C
4 B C
5 B D
警告信息:
预计2件。在两行中填写“NA”的缺失片段[1,3]。
g从desval的两个建议开始,我提出了这个建议。
这适用于在一个或两个节点上单独操作时,故障次数较多。例如,对于数据,您需要向量吗?在带有from和to列的数据帧中传递到IGRAPHE要容易得多。这使您能够保持代码的干净和易于阅读。而且,我想它会更快。
library(igraph)
library(dplyr)
selfloop <- function(x){
y <- ifelse(!grepl(" & ",x), paste(x,x, sep = " & "), x)
return(y)
}
data <- data.frame(nodes=c("E","A & B","C","B & C","B & D"))
g <- data %>%
mutate(nodes = selfloop(nodes)) %>%
separate(nodes, c("from", "to"), sep = " & ") %>%
graph_from_data_frame(directed = FALSE)
plot(g)