我有一个数据框struct
,显示了事物的层次结构:
# A tibble: 4 × 3
lev1 lev2 lev3
<chr> <chr> <chr>
1 A AA AAA
2 B AA AAA
3 C BB BBB
4 D BB BBB
在另一个数据框中,things
,每个事物的描述符$Code
:
# A tibble: 8 × 2
Thing Code
<chr> <chr>
1 A 11-11
2 B 22-22
3 C 33-33
4 D 44-44
5 AA 111-111
6 BB 222-222
7 AAA <NA>
8 BBB <NA>
我将struct
转换为data.tree
节点:
struct$pathString <- paste("things",
struct$lev3,
struct$lev2,
struct$lev1,
sep = "/")
pfo <- as.Node(struct)
print(pfo)
命令给出输出:
1 things
2 ¦--AAA
3 ¦ °--AA
4 ¦ ¦--A
5 ¦ °--B
6 °--BBB
7 °--BB
8 ¦--C
9 °--D
我想在每个级别看到的是things$Code
在打印树中每个Thing
之后的适当值,如下所示:
1 things Code
2 ¦--AAA
3 ¦ °--AA 111-111
4 ¦ ¦--A 11-11
5 ¦ °--B 22-22
6 °--BBB
7 °--BB 222-222
8 ¦--C 33-33
9 °--D 44-44
如何分配这些值并打印出来?
答案 0 :(得分:0)
这是一个解决方案,按字母顺序对Things
和树上的遍历进行排序以匹配代码:
#get the nodes corresponding to the struct elements as a traversal
trav <- Traverse(pfo, filterFun = isNotRoot)
#order alphabetically
trav <- trav[order(Get(trav, "name"))]
#also order things alphabetically
codes <- things[order(things$Thing), 2]
#assign codes to nodes
Set(trav, Code = codes$Code)
#print codes
print(pfo, "Code")
然后将根据需要打印:
levelName Code
1 things
2 ¦--AAA
3 ¦ °--AA 111-111
4 ¦ ¦--A 11-11
5 ¦ °--B 22-22
6 °--BBB
7 °--BB 222-222
8 ¦--C 33-33
9 °--D 44-44