2013-08-06 37 views
-2

我想是的输出应包含每个企业只有第二高的薪水进入.... 例如:如何找到业务中的R分组的第二最高的薪水

customer_id name   sales firstname lastname income business 
6   Priyank Dwivedi  2 Priyank Dwivedi 650000  PES 
4    Monika Maurya  3 Monika Maurya 200000  ITS 
1    Rahul Ranjan  3  Rahul Ranjan 1000000 PES 
7    Ambreen Khan  1 Ambreen  Khan 800000  PES 
3      P Paul  3   P  Paul 500000  ITS 
5    Sunny Tiwari  2  Sunny Tiwari 900000  Analytics 
2    Mayank Agarwal  3 Mayank Agarwal 300000  PES 
8    Shashank Rawat  1 Shashank Rawat 100000  Analytics 

我想要输出为:

customer_id name   sales firstname lastname income business 
4    Monika Maurya  3 Monika Maurya 200000  ITS 
8    Shashank Rawat  1 Shashank Rawat 100000  Analytics 
7    Ambreen Khan  1 Ambreen  Khan 800000  PES 

这是来自每个业务的第二高薪水。

+1

你可以提供一个重复的例子,你的数据帧。 'dput(df)'帮助你获得输出,所以你可以在这里发布它。 W.r.t.你的问题我建议看看类似:sort(x,partial = 1)[1],也许将它与'reshape2'包中的'ddply'结合起来。 –

+0

结合@MattBannert所说的,你试过了什么? –

回答

2

...一个解决方案可能是:

res <- t(sapply(unique(data[, "business"]), 
       function(x, data){ 
        # this are the subsets 
        d <- data[x==data[, "business"], ] 
        # order it and take second 
        d[order(d[, "income"], decreasing=TRUE)[2], ] 
       }, data=data)) 
res 

data作为数据

+0

你能解释你的答案吗? –

+0

当然,唯一的(数据[,“商业”])采取每个独特的业务,每个元素比变成x,例如。第一个x =“PES”。索引像'data [x == data [,“business”],]'给你一个其他矩阵,只有上面的条件为TRUE的元素,例如。所有业务=“PES”。这应该是你需要的子集。在这个子集中,你根据收入'd [order(d [,“income”],decrease = TRUE)[2]]并且比第二高的顺序进行排序,因此[2] – holzben

+0

您的答案的问题是,在名称列而不是显示正确的名称是显示因子,1 –

相关问题