Используя R, мне нужно собрать отчет о двух лучших сотрудниках в каждом отделе с наибольшим количеством расходов и добавить «Другие» для других сотрудников отдела. Для экземпляров мне нужен отчет, похожий на этот.Обобщение и ранжирование данных Frame
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, но здесь это не вариант.
Впечатляющий ответ Арун! Это именно то, что я искал! В чем разница между data.frame и date.table? Что представляют .N? Что, если бы я хотел, чтобы пятеро сотрудников на один отдел? Большое спасибо за ваш ответ! – Martin
@Martin, я изменил ответ, установив переменную 'k', которая соответствует * топ-сотрудникам *. Вы можете установить его на 2 или 5, чтобы получить соответствующие результаты. 'data.table' - это внешний пакет, который строится поверх' data.frame', но очень * быстрый и эффективный. Вы можете начать, посмотрев «виньетки» [** здесь **] (http://cran.r-project.org/web/packages/data.table/index.html) – Arun