簡體   English   中英

通過id的data.tree節點

[英]data.tree nodes through Id's

我的數據通過IdParentId系統鏈接,並且設法添加了正確的整數levels ,但是,我想pathString一個函數,該函數自動將5層層次結構pathStringdata.tree

結構體:

Id                 Name               ParentId           ParentName    Level
701F0000006Iw8E    'Paid Media'       NA                 NA            1
701F0000006IS1t    'Bing ABC'         701F0000006Iw8Y    'Bing'        3    
701F0000006IS28    'Bing DEF'         701F0000006Iw8Y    'Bing'        3
701F0000006IS23    'Bing GHI'         701F0000006Iw8Y    'Bing'        3
701F0000006Imq9    'Bing JKL'         701F0000006Iw8Y    'Bing'        3
701F0000006IS1y    'Bing MNO'         701F0000006Iw8Y    'Bing'        3
701F0000006Iw8Y    'Bing'             701F0000006Iw8E    'Paid Media'  2
701F0000006IvcW    'Google'           701F0000006Iw8E    'Paid Media'  2
7012A000006rhY8    'Adwords ABC'      701F0000006IvcW    'Google'      3
701F0000006IS1j    'Adwords DEF'      701F0000006IvcW    'Google'      3
701F0000006IS1o    'Adwords GHI'      701F0000006IvcW    'Google'      3
701F0000006IS1Z    'Adwords JKL'      701F0000006IvcW    'Google'      3
701F0000006Ieci    'Adwords MNO'      701F0000006IvcW    'Google'      3

當前,我遇到以下問題:pathString在以下情況下只能由單個層讀取:

dat$pathString <- paste(dat$ParentId, 
      dat$Id, 
      sep = "/")

防爆。

 "NA/701F0000000SOEq"

實際上,為了正確地填充整個樹,我需要在字符串中標識所有后續父級:

 "NA/701F0000006Iw8E/701F0000006Iw8Y/701F0000006IS1t" for "Bing ABC"

理想情況下,單個表達式對所有級別都等效,但是我知道每個級別是否需要單獨處理。

完整的Id,ParentId系統位於此處: Dropbox鏈接

盡管您的問題要求輸入路徑字符串,但是可以直接從數據框格式構建樹。

library(data.tree)
dat <- read.table(text="
Id                 Name               ParentId           ParentName    Level
701F0000006Iw8E    'Paid Media'       NA                 NA            1
701F0000006IS1t    'Bing ABC'         701F0000006Iw8Y    'Bing'        2    
701F0000006IS28    'Bing DEF'         701F0000006Iw8Y    'Bing'        2
701F0000006IS23    'Bing GHI'         701F0000006Iw8Y    'Bing'        2
701F0000006Imq9    'Bing JKL'         701F0000006Iw8Y    'Bing'        2
701F0000006IS1y    'Bing MNO'         701F0000006Iw8Y    'Bing'        2
701F0000006Iw8Y    'Bing'             701F0000006Iw8E    'Paid Media'  3
701F0000006IvcW    'Google'           701F0000006Iw8E    'Paid Media'  3
7012A000006rhY8    'Adwords ABC'      701F0000006IvcW    'Google'      2
701F0000006IS1j    'Adwords DEF'      701F0000006IvcW    'Google'      2
701F0000006IS1o    'Adwords GHI'      701F0000006IvcW    'Google'      2
701F0000006IS1Z    'Adwords JKL'      701F0000006IvcW    'Google'      2
701F0000006Ieci    'Adwords MNO'      701F0000006IvcW    'Google'      2
", header=TRUE, stringsAsFactors = F)

# network build does not want a root node as a row, so adjust
# the given root to link to "tree_root"
dat$ParentId[is.na(dat$ParentId)] <- "tree_root"

# build the tree using the network layout - pairs of node ids
# in the first two columns. Remaining columns are node attributes
dat_network <- subset(dat, !is.na(dat$ParentId), c("Id", "ParentId", "Name"))
dat_tree <- FromDataFrameNetwork(dat_network, check = "check")

print(dat_tree, 'Name')

# 1  tree_root                              
# 2   °--701F0000006Iw8E          Paid Media
# 3       ¦--701F0000006Iw8Y            Bing
# 4       ¦   ¦--701F0000006IS1t    Bing ABC
# 5       ¦   ¦--701F0000006IS28    Bing DEF
# 6       ¦   ¦--701F0000006IS23    Bing GHI
# 7       ¦   ¦--701F0000006Imq9    Bing JKL
# 8       ¦   °--701F0000006IS1y    Bing MNO
# 9       °--701F0000006IvcW          Google
# 10          ¦--7012A000006rhY8 Adwords ABC
# 11          ¦--701F0000006IS1j Adwords DEF
# 12          ¦--701F0000006IS1o Adwords GHI
# 13          ¦--701F0000006IS1Z Adwords JKL
# 14          °--701F0000006Ieci Adwords MNO

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM