如何获得R data.tree打印以显示每个级别的值?

时间:2017-03-30 17:18:45

标签: r

我有一个数据框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

如何分配这些值并打印出来?

1 个答案:

答案 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