2017-09-14 68 views
0

我得到了大約100萬obs的數據幀。和20個變量。變量包括級別和零件ID信息。 基本上它就像一個樹結構數據框。我想爲'level'上的每一行創建路徑(級別< 20)。下面是一個例子,「路徑」這一列是我想要創建的。 我目前使用嵌套的for循環與如果創建路徑。它處理每一行,所以我的筆記本電腦需要5到6小時才能獲得一百萬行的路徑。任何想法如何讓路徑更省時?謝謝!爲R中的樹結構數據框中的每個節點創建路徑

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 

回答

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) 
+0

第5行是一個錯字,我更新了原始表。將嘗試使用大數據集並查看需要多長時間。謝謝MrFlick。 – Vincent

+0

用五百萬行數據集嘗試了這一點,並完美工作。花了不到一分鐘,這正是我想要的 ! – Vincent

相關問題