2016-10-28 65 views
0

我有一個數據幀,它在fk列中的行之間保持父子關係,稱爲parent_id將FK列中的父子關係轉換爲層次結構路徑字符串

我想將此dataframe轉換爲分層數據結構,如data.tree,它等效於列表的列表。

這裏是我的輸入dataframe

df = data.frame(id = 1:3, name = c("asia", "iran", "tehran"), parent_id = c(NA, 1, 2)) 
df 
# id,name,parent_id 
# 1,asia,NA 
# 2,iran,1 
# 3,tehran,2 

這裏的目標輸出到輸入轉換爲。在這裏,我添加了一個名爲pathString的新列,其中包含每行的層次父子路徑。

# target data: 
# 
# id,name,parent_id,pathString 
# 1,asia,NA,asia 
# 2,iran,1,asia/iran 
# 3,tehran,2,asia/iran/tehran 

如何生成pathString列,其中包含行間的父子關係?

回答

0

你可以做這樣的事情:

df$pathString=sapply(1:nrow(df), function(i) paste(df[,2][1:i], collapse = '/')) 
0

您可能要直接使用FromDataFrameNetwork,例如是這樣的:

library(data.tree) 
df <- data.frame(parent_id = c(0, 1, 2), id = 1:3, name2 = c("asia", "iran", "tehran"), stringsAsFactors = FALSE) 

tree <- FromDataFrameNetwork(df) 
tree$name2 <- "world" 
tree$Do(function(x) x$id <- x$name) 
tree$Do(function(x) x$name <- x$name2) 

print(tree, "id") 

這將打印:

  levelName id 
1 world    0 
2 °--asia   1 
3  °--iran  2 
4   °--tehran 3