【问题标题】:R - Employee Reporting StructureR - 员工报告结构
【发布时间】:2017-09-24 13:20:17
【问题描述】:

背景:我正在使用 R 和一些包从票务系统中提取 JSON 数据。我正在拉动所有用户并想建立一个报告结构。

我有一个包含员工及其经理的数据集。这些列被命名为(“员工”和“经理”)。我正在尝试构建一个向上到根的报告结构树。我们在一个 IT 组织中,但我正在提取所有员工数据,所以这看起来像:

公司->业务部门->执行->总监->集团经理->经理->员工

这是基本的想法。有些区域的树结构很小,有些区域是多层次的。基本上,我想做的是得到一个树,或者我可以参考的报告结构,这样我就可以为员工确定他们的主管是谁。这可以删除 1 个级别或最多删除 5 或 6 个级别。

我遇到了data.tree,但到目前为止,就我而言,我必须提供一个定义该结构的pathString。因为我只有两列,所以我想做的是把这个数据框扔到一个函数中,让它在找到员工时遍历列表,把它放在那个经理下面,当它找到那个经理作为员工时,将其嵌套在他们的直接下属之下,以及嵌套在他们之下的任何内容。

如果不定义 pathString,我无法弄清楚如何使 data.tree 执行此操作,但这样做,我只能在我所知道的每一行 - 员工上构建 pathString和他们的经理。结果是一棵只有 2 个级别的树,主管未连接到他们的组经理,组经理未连接到他们的经理等等。

我考虑过编写一些逻辑/循环来执行此操作,但必须有一种更简单的方法或一个包可以用来执行此操作。也许我没有正确定义pathString....

最终,我希望最终结果是一个具有如下列的数据框:

员工、经理 1、经理 2、经理 3、经理 X,...

当然,有些行只会在第 1 列和第 2 列中有条目,但其他行可能会上升很多级别。一旦我有了这个,我就可以在我们的配置管理系统中查找设备,找到所有者并将这些计数汇总到适当的控制器下。

任何帮助将不胜感激。我不能发布数据,因为它本质上是机密的,但它只包含员工及其经理。我只需要连接所有的点...谢谢!

【问题讨论】:

  • 以后我建议提供一些示例数据并提出更简短的问题 - 这将增加您获得更快答复的可能性。

标签: r data-science


【解决方案1】:

data.tree 包具有 FromDataFrameNetwork 函数,仅适用于这种情况:

library(data.tree)

DataForTree <- data.frame(manager = c("CEO","sally","sally","sue","mary", "mary"),
                          employee = c("sally","sue","paul","mary","greg", "don"),
                          stringsAsFactors = FALSE)


tree <- FromDataFrameNetwork(DataForTree)

print(tree)

结果:

1 CEO                 
2  °--sally           
3      ¦--sue         
4      ¦   °--mary    
5      ¦       ¦--greg
6      ¦       °--don 
7      °--paul  

【讨论】:

  • 这就是我要找的东西,但是当我针对我的数据框运行时,我得到:“FromDataFrameNetwork(df) 中的错误:找不到根名称。网络不是一棵树!”您上面的示例正是我正在寻找的,但我的数据有空格和用户 ID。一个例子是:“史密斯,约翰 A12345”。那是格式。数据元素的格式是否会抛出 data.tree ?我在上面尝试了您的示例代码,它工作正常。我猜这是我的数据的格式。我正在使用一个数据框,每一列都是一个字符向量,我有 12k 行。
  • 请像我制作的那样构建一个示例数据框并将其添加到您的问题中。组成数据,但它应该与您的数据匹配并使用相同的列名。
  • 我做了一些测试,用我的数据格式化你的例子,它适用于那个边缘情况。我想知道这是否与我可能有断开连接的树有关...换句话说,我可能有一些组织机构没有连接到另一个以将其与整棵树结合在一起。
  • 我将建立一个数据集并修改我的帖子...谢谢!
【解决方案2】:

hR 包专为满足使用人员/员工数据进行数据分析的需求而设计;虽然,在这一点上它是最小的。 hierarchy 函数可以根据需要生成宽数据框;这有助于加入其他数据并继续分析。

library(hR)
ee = c("Dale@hR.com","Bob@hR.com","Julie@hR.com","Andrea@hR.com")
supv = c("Julie@hR.com","Julie@hR.com","Andrea@hR.com","Susan@hR.com")
hierarchy(ee,supv,format="wide")

  Employee      Supv1         Supv2        Supv3
1   Dale@hR.com Susan@hR.com Andrea@hR.com Julie@hR.com
2    Bob@hR.com Susan@hR.com Andrea@hR.com Julie@hR.com
3  Julie@hR.com Susan@hR.com Andrea@hR.com         <NA>
4 Andrea@hR.com Susan@hR.com          <NA>         <NA>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多