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)