r - 是否可以为空第一个变量值并在 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来说什么都不是。谢谢!
解决方案
对的,这是可能的。你可以试试下面的代码
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"
)
推荐阅读
- sql - 如何在 BigQuery 的一列/行中合并多行值
- graphql - 向 graphql 客户端添加多个标头(apollo-boost)
- mysql - 如何计算多列的平均值并在sql server中排除零
- return-value - GNU屏幕结束时如何使GNU屏幕返回最后一个返回码
- sap - ngdbc.jar(2.4.67 或更高版本)是否支持 JRE 11?
- c# - 为什么 openfiledialog 在第二次选择文件后显示“路径不存在”或“灾难性错误”?
- ios - 如何在终止/终止状态下检测 ios 中的传入 GSM 呼叫事件?
- selenium-webdriver - 更改 Edge chromium 上的默认下载位置
- git - 如何用 master 替换我的分支内容?
- c++ - 带有子目录的 Makefile 找不到标头