是否可以将第一个变量值清空并在 R 中制作 igraph?
Is possible to be empty the first variable values and make igraph in R?
我有一个数据框想在 R 中创建一个 igraph plot
。但是在第一列中,有些行没有值。如您所见,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 什么都不是。
谢谢!
是的,这是可能的。您可以试试下面的代码
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"
)
我有一个数据框想在 R 中创建一个 igraph plot
。但是在第一列中,有些行没有值。如您所见,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 什么都不是。 谢谢!
是的,这是可能的。您可以试试下面的代码
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"
)