3

我有这个数据框:

> 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”的第三个最低值

   c1  c2
   3   a
   4   b
4

3 回答 3

4

本质上是一个主题的变体:

aggregate(c1 ~ c2, df, function(x) sort(x)[3])
#   c2 c1
# 1  a  3
# 2  b  4
于 2013-10-13T18:29:29.417 回答
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
于 2013-10-13T18:22:21.917 回答
1

使用数据表

library(data.table)
dt<-data.table(df1)
dt[,sort(c1)[3],by=c2]
   c2 V1
1:  b  4
2:  a  3
于 2013-10-13T18:25:33.053 回答