我有这个数据框:
> 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
本质上是一个主题的变体:
aggregate(c1 ~ c2, df, function(x) sort(x)[3])
# c2 c1
# 1 a 3
# 2 b 4
你有不同的选择,一个可以是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
使用数据表
library(data.table)
dt<-data.table(df1)
dt[,sort(c1)[3],by=c2]
c2 V1
1: b 4
2: a 3