r - R中的深度优先递归
问题描述
我正在使用数据集更新这个问题,以便我可以获得更多帮助(基于反馈)。我不是要求人们做我的功课,但肯定会感谢任何指示。
我有以下代码
>> start of code
# BOM data
library("dplyr")
library(igraph)
text1 <- ("
matnr,comp
FG1,SA1
FG1,SA2
SA1,SA3
SA1,SA4
SA1,SA5
SA5,SA6
FG2,SA1
FG2,SA8
SA8,SA9
SA9,SA10
SA9,SA11")
df1 <- read.table(textConnection(text1), header = TRUE, stringsAsFactors=FALSE, strip.white = TRUE, sep=",")
head(df1)
net <- graph_from_data_frame(df1)
net
neighbors_FG1 <- neighbors(net, v=c("FG1"), mode=c("out"))
neighbors_FG1
neighbors_FG2 <- neighbors(net, v=c("FG2"), mode=c("out"))
neighbors_FG2
neighbors_SA1 <- neighbors(net, v=c("SA1"), mode=c("out"))
neighbors_SA1
>> end of code
我希望能够生成如下所示的数据框。我认为这需要某种递归,我想得到帮助。如果您甚至可以帮助我了解如何获得下面的输出,那就太好了。
FG,level,material,Comp FG1,1,FG1,SA1
FG1,1,FG1,SA2
FG1,2,SA1,SA3
FG1,2,SA1,SA4
FG1,2,SA1,SA5
FG1,3,SA5,SA6
FG2 ,1,FG2,SA1
FG2,1,FG2,SA8
FG2,2,SA8,SA9
解决方案
希望这可以帮助你(使用虚拟数据df
)
df <- data.frame(
from = c("A", "A", "A", "B"),
to = c("B", "C", "D", "C")
)
net <- graph_from_data_frame(df)
v <- vall <- "A"
while (length(unique(unlist(vall))) < vcount(net)) {
p <- neighbors(net, v)
vall <- c(vall, list(names(p)))
v <- p
}
这使
> vall
[[1]]
[1] "A"
[[2]]
[1] "B" "C" "D"
或者,您可以使用dfs
> dfs(net, "A")
$root
[1] 0
$neimode
[1] "out"
$order
+ 4/4 vertices, named, from 9d73ae8:
[1] A B C D
$order.out
NULL
$father
NULL
$dist
NULL
推荐阅读
- java - 如何在与 Firebase 关联的 Android Studio 中显示我的应用的所有在线用户?
- python - 芹菜:找不到模块
- java - Appium 无法识别屏幕上的元素,即使它们是使用 initElements 初始化的
- windows - Xhr 请求在我机器上的所有浏览器中显示等待某种格式
- r - 考虑日期的数据框的排序列 - R
- jq - 如何在jq中产生笛卡尔正方形?
- python - 气流:超时后如何将 ExternalTaskSensor 运算符标记为成功
- matplotlib - 如何更改图例标签的 alpha?
- codenameone - 禁用后启用标签滑动(在代号一上)
- javascript - 在 ngFor 循环中使用 Object.keys 时如何设置默认值?