我有此數據幀的所有水平:- [R由一列的值提取的第i個最低值,對於另一列
> 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時,輸出應的第三最低值「C1」 爲 「C2」
c1 c2
3 a
4 b
我有此數據幀的所有水平:- [R由一列的值提取的第i個最低值,對於另一列
> 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時,輸出應的第三最低值「C1」 爲 「C2」
c1 c2
3 a
4 b
你有不同的選擇的兩個層面,一個可以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
使用上一個主題data.table
library(data.table)
dt<-data.table(df1)
dt[,sort(c1)[3],by=c2]
c2 V1
1: b 4
2: a 3
一鍵可用於預先分類:' setkey的(DT,C2,C1); DT [,C1 [3],通過= C2]'。在鍵中包含「c2」只是確保a在結果之前出現b。 – Frank
感謝洞察@Frank – Metrics