对于另一列的所有级别,R通过一列的值提取第n个最低值

时间:2013-10-13 18:17:11

标签: r dataframe

我有这个数据框:

> df
   c1 c2
1   1  b
2   2  a
3   3  a
4   4  a
5   3  a
6   2  b
7   6  a
8   4  b
9   8  b
10  7  a

因此,对于i = 3,对于“c2”的两个级别,输出应该是“c1”的第3个最低值

   c1  c2
   3   a
   4   b

3 个答案:

答案 0 :(得分:4)

基本上是主题的变体:

aggregate(c1 ~ c2, df, function(x) sort(x)[3])
#   c2 c1
# 1  a  3
# 2  b  4

答案 1 :(得分:3)

您有不同的选项,一个可以是tapply

    > df<-read.table(text="   c1 c2
 1   1  b
 2   2  a
 3   3  a
 4   4  a
 5   3  a
 6   2  b
 7   6  a
 8   4  b
 9   8  b
 10  7  a")
> df
   c1 c2
1   1  b
2   2  a
3   3  a
4   4  a
5   3  a
6   2  b
7   6  a
8   4  b
9   8  b
10  7  a
> tapply(df$c1, df$c2, function(x) sort(x)[3])
a b 
3 4 

或者,使用plyr包,您可以:

> library(plyr)

> ddply(df, .(c2), summarise, c1=sort(c1)[3])
  c2 c1
1  a  3
2  b  4

答案 2 :(得分:1)

使用data.table

library(data.table)
dt<-data.table(df1)
dt[,sort(c1)[3],by=c2]
   c2 V1
1:  b  4
2:  a  3