为R中的树结构数据框中的每个节点创建路径

时间:2017-09-14 19:19:10

标签: r

我得到的数据框大约有100万个。和20个变量。变量包括级别和部件ID信息。 基本上它就像树结构数据帧。我想在“级别”(级别< 20)上为每个行创建路径。下面是一个示例,“Path”列是我想要创建的。 我目前使用嵌套的for循环使用if来创建路径。它处理每一行,所以我的笔记本电脑需要5到6个小时来获得一百万行的路径。关于如何让路径更有时间效率的任何想法?谢谢!

Level   Part ID   Path
1       11111    11111
2       22222    11111/22222
3       33333    11111/22222/33333
3       44444    11111/22222/44444
4       55555    11111/22222/44444/55555
2       66666    11111/66666
1       77777    77777
2       88888    77777/88888

1 个答案:

答案 0 :(得分:0)

使用此测试数据

dd <- read.table(text="Level   PartID   Path
1       11111    11111
2       22222    11111/22222
3       33333    11111/22222/33333
3       44444    11111/22222/44444
4       55555    11111/22222/44444/55555
2       66666    11111/66666
1       77777    77777
2       88888    77777/88888", header=T)

使用单个循环可能是最有效的。例如

get_path <- function(level, part) {
    path <- character(length(level))
    current_parts <- c()
    for(i in seq.int(length(path))) {
        current_level <- level[i]
        current_parts[current_level] <- part[i]
        path[i] <- paste(current_parts[1:current_level], collapse="/")
    }
    path
 }
 get_path(dd$Level, dd$PartID)