背景:我正在使用R和一些软件包从票务系统中提取JSON数据。我拉动了所有用户,并希望建立一个报告结构。
我有一个包含员工及其经理的数据集。这些列的名称是这样的("员工"和"经理")。我正在尝试构建一个直到根的报告结构树。我们是一个IT组织,但我正在提取所有员工数据,所以这看起来像是:
公司 - >业务部门 - >执行 - >导演 - >集团经理 - >经理 - >员工
这是基本想法。一些区域的树结构很小,其他区域则是多层。基本上,我想要做的是获得一棵树,或者我可以参考的报告结构,所以我可以确定一个员工,他们的导演是谁。这可能是1级删除或最多删除5或6级。
我遇到了data.tree
,但到目前为止,在我看来,我必须提供一个定义该结构的pathString
。由于我只有两列,我想要做的就是将这个数据框放到一个函数中,当它找到员工时让它遍历列表,将它放在该管理器下,当它发现该管理器为员工,在它们的直接报告下嵌套它,以及嵌套在它们下面的任何东西。
在没有定义data.tree
的情况下,我还没有弄清楚如何让pathString
这样做,但是这样做,我只能在pathString
上构建pathString
我知道每一行 - 员工和他们的经理。结果是一棵树只有2个级别,导演没有连接到他们的集团经理,集团经理也没有连接到他们的经理等等。
我考虑过编写一些逻辑/循环来完成并执行此操作,但必须有一个更简单的方法或包可以用来执行此操作。也许我没有正确定义def FindHtml(self, text):
site = text
#headers = {'User-agent' : 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2'}
headers = {'User-agent' : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'}
proxy_support = self.proxi()
opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler(debuglevel=1))
urllib2.install_opener(opener)
page=""
#req = urllib2.Request(site, None,headers)
req = urllib2.Request(site, None,headers)
try:
page = urllib2.urlopen(req).read()
except urllib2.HTTPError, e:
print e.fp.read()
content = page
#print content
return content
....
最终,我最终的结果是一个数据框,其列如下:
员工,经理1,经理2,经理3,经理X,......
当然,有些行只会在第1列和第2列中包含条目,但其他行可能会有很多级别。有了这个,我可以在配置管理系统中查找设备,找到所有者并在相应的控制器下聚合这些计数。
任何帮助都会受到赞赏。我不能发布数据,因为它本质上是保密的,但它只包含员工及其经理。我只需连接所有点......谢谢!
答案 0 :(得分:4)
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
答案 1 :(得分:0)
在hR
包利用的data.tree
,但它是专门设计为使用人/雇员数据进行数据分析的需要。您还可以根据需要返回一个宽数据帧。这有助于与其它数据结合,并继续进行分析。
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")
hierarchyWide(ee,supv)
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>