首页 > 解决方案 > 是否可以为空第一个变量值并在 R 中制作 igraph?

问题描述

我有一个想要igraph plot在 R 中创建的数据框。但是在第一列中,有些行没有值。如您所见,NMSUKU 中的第 5-7 行没有值。

dput(sample)
structure(list(NMSUKU = c("Betawi", "Cirebon", "Sunda", "Jawa", 
"", "", "", "Bawean/ Boyan", "Osing/ Using", "Tengger", "Madura", 
"Badui/ Baduy", "Banten", "Banten"), TopLang = c("82_Batavi/ Batawi/ Betawi/ Melayu Betawi/ Melayu Jakarta/ Melayu Jakarte", 
"84_Cirebon", "86_Priangan/ Sunda", "88_Jawa", "83", "85", "89", 
"3000_Bahasa lainnya di Jawa", "90_Banyuwangi/ Osing", "93_Tengger", 
"91_Basa Mathura/ Madhura/ Madura/ Madure", "86_Priangan/ Sunda", 
"95_Banten", "86_Priangan/ Sunda"), Ethnicity = c("111_Betawi", 
"112_Cirebon", "113_Sunda", "114_Jawa", "114_Jawa", "114_Jawa", 
"114_Jawa", "116_Bawean/ Boyan", "119_Osing/ Using", "120_Tengger", 
"121_Madura", "113_Sunda", "123_Banten", "113_Sunda")), class = "data.frame", row.names = c(NA, 
-14L))

我想做的: 在此处输入图像描述

正如您在Jawa 屏幕截图中看到的那样,83,85 和 89必须连接到114_Jawa,而首先对于83,85 和 89来说什么都不是。谢谢!

标签: rigraph

解决方案


对的,这是可能的。你可以试试下面的代码

m <- as.matrix(replace(sample, sample == "", "NA"))
g <- simplify(graph_from_edgelist(rbind(m[, 1:2], m[, 2:3]), directed = TRUE))
l <- layout_with_sugiyama(g)

idx <- which(names(V(g)) == "NA")
l$layout <- l$layout[-idx, ]
g <- delete.vertices(g, "NA")

plot(g,
  layout = -l$layout[, 2:1],
  edge.arrow.size = 0.1,
  vertex.size = 2.5,
  vertex.color = "grey",
  vertex.label.dist = 1,
  edge.arrow.width = 1.5,
  edge.width = seq(0.5, 0.08),
  edge.lty = "solid",
  edge.color = "gray",
  vertex.label.cex = 0.7,
  is.rm = TRUE,
  vertex.label.color = "black"
)

在此处输入图像描述


推荐阅读