更改R可扩展树包中的默认深度

cwtwac6a  于 2024-01-03  发布在  其他
关注(0)|答案(1)|浏览(136)

我有一些简单的分层数据(父子层次结构),我想在R中可视化。我目前正在使用R软件包“Rollsibletree”,但还没有找到一种方法来改变默认的深度,以显示树,也许,扩展了3个层次。我知道我可以显示完整的树(collapsed = TRUE)或使其显示完全折叠(collapsed = TRUE),但还没有找到指定默认深度的方法。
示例数据和代码包含在下面。
dput:

structure(list(ParentNode = c(NA, "President", "President", "CFO", 
"COO", "Operations SVP", "FP&A SVP", "FP&A VP", "FP&A Senior Analyst"
), Node = c("President", "COO", "CFO", "FP&A SVP", "Operations SVP", 
"Operations VP", "FP&A VP", "FP&A Senior Analyst", "FP&A Associate"
)), class = "data.frame", row.names = c(NA, -9L))

字符串
| 节点|ParentNode| ID| parentId|
| --|--|--|--|
| 总统|| 1 ||
| COO|总统| 2 | 1 |
| CFO|总统| 3 | 1 |
| 会计高级副总裁|CFO| 4 | 3 |
| FP&A高级副总裁|CFO| 5 | 3 |
| FP&A副总裁|FP&A高级副总裁| 6 | 5 |
| 高级分析师|FP&A副总裁| 7 | 6 |
| 高级助理|FP&A副总裁| 8 | 6 |
| 副|高级助理| 9 | 8 |
| 实习生|副| 10 | 9 |
x1c 0d1x的数据

> library(collapsibleTree)
> Data1 <- read.csv(".....csv", na.strings ='', stringsAsFactors = FALSE)
> Data2 <- Data1[, c(2,1)]
> collapsibleTreeNetwork(Data2, collapsed = TRUE, inputId = 'node')

rta7y2nd

rta7y2nd1#

我们没有任何可复制的数据,因此让我们使用内置数据集warpbreaks,如collapsibleTree帮助文件中所用。
默认情况下,除根节点外的所有节点都将折叠:

library(collapsibleTree)

collapsibleTree(df = warpbreaks, 
                hierarchy = c("wool", "tension", "breaks"))

字符串


的数据
如果我们设置collapsed = FALSE,那么所有节点都被展开:

collapsibleTree(df = warpbreaks, 
                hierarchy = c("wool", "tension", "breaks"),
                collapsed = FALSE)



如果你想要一个不同的开始安排,那么根据帮助文件,collapsed参数可以如下使用:
对于data.frame输入,也可以是逻辑值的向量,其长度与节点数相同。遵循与填充向量相同的逻辑。
fill的条目告诉我们:
默认情况下,vector应该按级别排序,这样首先描述根颜色,然后是所有子颜色,然后是所有孙颜色
因此,我们希望在默认值之后显示树的下一级,我们需要collapsed是一个3 FALSE后跟55 TRUE的向量。
一般来说,我们可以通过传递这个函数来计算出要折叠的正确节点:

collapse_depth <- function(depth = 0) {
  args <- as.list(sys.call(1))[-1]
  cols <- eval(args$hierarchy)
  data <- eval(args$df)
  if(length(cols) < depth) depth <- length(cols)
  if(depth <= 1) return(TRUE)
  depth <- round(depth)
  n_nodes <- sum(unlist(lapply(seq_along(cols), function(i) {
    length(levels(factor(do.call("paste", data[unlist(cols[seq(i)])]))))
    }))) + 1
  n_expand <- sum(unlist(lapply(seq(depth - 1), function(i) {
  length(levels(factor(do.call("paste", data[unlist(cols[seq(i)])]))))
  }))) + 1
  return(c(rep(FALSE, n_expand), rep(TRUE, n_nodes - n_expand)))
}


这允许

collapsibleTree(df = warpbreaks, 
                hierarchy = c("wool", "tension", "breaks"),
                collapsed = collapse_depth(2))

相关问题