使用R,我需要为每个部门的前两名员工创建一份报告,报告费用最高,并为该部门的其他员工添加一个“其他”。例如,我需要一个类似这样的报告。总结和排名数据框
Dept. EmployeeId Expense
Marketing 12345 100
Marketing 12346 90
Marketing Others 200
Sales 12347 50 <-- There's just one employee with expenses
Research 12348 2000
Research 12349 900
Research Others 10000
换句话说,我需要总结一下数据,重点关注费用最高的前两名员工。费用总额应该是公司费用总额。
employeIds <- sample(1000:9999, 20)
depts <- sample(c('Sales', 'Marketing', 'Research'), 20, replace = TRUE)
expenses <- sample(1:1000, 20, replace = TRUE)
df <- data.frame(employeIds, depts, expenses)
# Based on that data, how do I build a table with the top 2 employees with the most expenses in each department, including an "Other" employee per department.
我是R的新手,我不确定如何解决这个问题。在SQL中,我可以使用RANK()函数和JOIN,但这不是一个选项。
令人印象深刻的答案Arun!这正是我所期待的! data.frame和date.table有什么区别?什么代表.N?如果我想要每个部门的前5名员工呢?非常感谢您的回答! – Martin 2013-04-22 14:54:57
@Martin,我通过设置对应于* top k employees *的变量'k'来修改答案。您可以将其设置为2或5以获得适当的结果。 'data.table'是一个建立在'data.frame'之上的外部包,但是非常快速和高效。你可以先看看'vignettes' [** here **](http://cran.r-project.org/web/packages/data.table/index.html) – Arun 2013-04-22 16:51:11