data.tree节点通过Id';s
我的数据通过data.tree节点通过Id';s,r,tree,hierarchical-data,R,Tree,Hierarchical Data,我的数据通过Id,ParentId系统链接,我已经设法添加了正确的整数级别,但是,我想编写一个函数,自动将我的5层层次结构嵌套为数据树的路径字符串 结构: Id Name ParentId ParentName Level 701F0000006Iw8E 'Paid Media' NA NA 1 701F0000006IS1t 'Bi
Id
,ParentId
系统链接,我已经设法添加了正确的整数级别
,但是,我想编写一个函数,自动将我的5层层次结构嵌套为数据树的路径字符串
结构:
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/701F0000006Iw8E/701F0000006Iw8Y/701F0000006IS1t" for "Bing ABC"
理想情况下,一个表达式对所有级别都是等效的,但我知道每个级别是否需要单独处理
完整Id,此处为ParentId系统:
尽管您的问题要求输入路径字符串,但可以直接从数据帧格式构建树
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
库(data.tree)
dat我看不出这些数据与您链接的问题有什么不同。你至少试过那个密码吗?到底是什么不起作用?在这种情况下,它是一个字符级别而不是一个数字整数。在上一个问题中,他使用ind+1
在while
的每次迭代过程中逐级升级。我不知道如何通过字符值来实现这一点。i、 e,701F0000006Ieci+1=701F0000006IvcW
然后,701F0000006IvcW+1=701F0000006Iw8E
您为什么需要对data.trees执行路径方法?循环并添加孩子似乎更简单?我相信这个概念在这里是正确的,但它不起作用。这是我的Id和ParentID的完整列表。@gscott我下载了您的数据并可以构建树。你能澄清“不工作”吗?你能提供一些你尝试过的代码吗。您下载的数据只有ID-可能您删除名称是有原因的,但是如果没有任何其他名称,则很难验证该树。由于节点数量如此之多,树操作有点慢-我建议您阅读data.tree文档中关于性能的评论,以防您的实际数据比提供的数据还要大。抱歉@epi99-我最终以另一种方式解决了这个问题,但我非常感谢您的回答。基本上,每当我试图爬树寻找父节点或类似的东西时,我总是在树调用中得到“截断”响应。你对时间的把握是对的——我在一个闪亮的应用程序中使用它,因此响应速度无法满足我所需的互动性。
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