数据如下所示,称之为df1
:
员工ID |经理ID |管理水平
我正试图在某个管理级别由执行人员产生一个人数,让我们称之为“VP”级别。如何通过管理结构中的多个层进行汇总?我需要VP级别每位经理的总人数,其中包括较低级别的经理人员,他们向副总经理报告。
这是我到目前为止所做的:
require(dplyr)
managers <- group_by(df1, Manager.ID)
summarize(managers, count =n())
这告诉我每位经理的人数。现在我需要将这些总数计入VP级别经理的计数。
即。 VP被列为经理三次,因此他的当前count
= 3。这三位经理中的每一位都有4名他们管理的人。因此,有问题的VP的数量应该等于15。
如何在这个级别累积?
数据:
df1 <- structure(list(Employee.ID = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 27L
), Manager.ID = c(27L, 27L, 1L, 2L, 4L, 1L, 1L, NA), Management.Level = structure(c(5L,
5L, 1L, 1L, 3L, 3L, 4L, 2L), .Label = c("ASSOC", "CEO", "Entry",
"Etnry", "VP"), class = "factor")), .Names = c("Employee.ID",
"Manager.ID", "Management.Level"), class = "data.frame", row.names = c(NA,
-8L))
答案 0 :(得分:0)
试试这个:
#define MY_QUOTE(a) #a
#define CONCAT_QUOTE(a,b) MY_QUOTE(a##b)
#define CONCAT(a,b) a##b
// this works OK
#include CONCAT(<iostrea, m>)
// this doesn't as iostream should be just in <> rather than "<>"
#include CONCAT_QUOTE(<iostrea, m>)
这导致
df.c<- df1 %>%
arrange(Manager.ID, Employee.ID) %>%
mutate(gr = cumsum(lag(Manager.ID, default = 0) != Manager.ID &
lag(Employee.ID, default = 0) != Manager.ID)) %>%
group_by(gr) %>%
summarise(top.man.id = min(Manager.ID))
df.s<- df1 %>%
arrange(Manager.ID, Employee.ID) %>%
mutate(gr = cumsum(lag(Manager.ID, default = 0) != Manager.ID &
lag(Employee.ID, default = 0) != Manager.ID)) %>%
group_by(gr) %>%
summarise(count = n()) %>%
inner_join(df.c, by = "gr")
答案 1 :(得分:0)
对于此类数据,您可以使用data.tree包。
library(data.tree)
#convert factors to string
df1$Management.Level <- as.character(df1$Management.Level)
#convert df1 to data.tree
tree1 <- FromDataFrameNetwork(df1[-nrow(df1),])
tree1$Management.Level <- 'CEO'
您现在可以打印组织结构图报告数:
print(tree1, 'Management.Level', 'totalCount')
这显示如下:
levelName Management.Level totalCount
1 27 CEO 8
2 ¦--1 VP 4
3 ¦ ¦--3 ASSOC 1
4 ¦ ¦--6 Entry 1
5 ¦ °--7 Etnry 1
6 °--2 VP 3
7 °--4 ASSOC 2
8 °--5 Entry 1
或者,如果您只想要VP,可以使用返回命名列表的Get
函数:
tree1$Get('totalCount', filterFun = function(node) node$Management.Level == 'VP')
1 2
4 3
您甚至可以绘制(使用许多样式选项):
plot(tree1)