[英]data.tree nodes through Id's
我的數據通過Id
, ParentId
系統鏈接,並且設法添加了正確的整數levels
,但是,我想pathString
一個函數,該函數自動將5層層次結構pathString
為data.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.