我有这个数据框:
> 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
答案 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