В следующий раз вы можете опубликовать образец ваших данных, используя head (dput (x)), чтобы облегчить членам SO чтение ваших данных.
df <- read.table(text = "
EmployeeID EmployeeName Department Salary
1 T Cook Finance 40000.00
2 D Michael Finance 25000.00
3 A Smith Finance 25000.00
4 D Adams Finance 15000.00
5 M Williams IT 80000.00
6 D Jones IT 40000.00
7 J Miller IT 50000.00
8 L Lewis IT 50000.00
9 A Anderson Back-Office 25000.00
10 S Martin Back-Office 15000.00
11 J Garcia Back-Office 15000.00
12 T Clerk Back-Office 10000.00", header = T)
second_high_employee <- tail(sort(df$Salary),2)[1]
second_high_employee
[1] 50000
Кстати, имя объекта нельзя начинать с цифры. Вы можете проверить: ?make.names
Также для каждого отдела вы можете сделать:
aggregate(Salary ~ Department, df, function(x) {tail(sort(x), 2)[1]})
Department Salary
1 Back-Office 15000
2 Finance 25000
3 IT 50000
В случае, если было 2 верхних оклада в 80000, и вы хотели снова найти второе по величине из 50000, вы могли бы заключить x
или df$Salaray
в tail(sort(unique()), 2)[1]