R 按组查找第二大元素
在我的3列数据集中,2个是字符串,1个是整数:R 按组查找第二大元素,r,groupwise-maximum,R,Groupwise Maximum,在我的3列数据集中,2个是字符串,1个是整数: a<-read.table(text="X X.1 X.2 A Z1 5 B Z1 1 C Z1 21 E Z1 8 F Z1 7 G Z1 4 H Z1 13 I Z1 4 J Z1 5 A Z2 8 B
a<-read.table(text="X X.1 X.2
A Z1 5
B Z1 1
C Z1 21
E Z1 8
F Z1 7
G Z1 4
H Z1 13
I Z1 4
J Z1 5
A Z2 8
B Z2 1
D Z2 5
E Z2 5
F Z2 7
G Z2 4
H Z2 16
I Z2 7
J Z2 9
A Z3 8
B Z3 23
C Z3 11
D Z3 14
E Z3 15
", header=TRUE)
a我们可以试试
library(data.table)
setDT(a)[order(-X.2),.SD[2], X.1]
# X.1 X X.2
#1: Z3 E 15
#2: Z1 H 13
#3: Z2 J 9
我们可以试试
library(data.table)
setDT(a)[order(-X.2),.SD[2], X.1]
# X.1 X X.2
#1: Z3 E 15
#2: Z1 H 13
#3: Z2 J 9
您只需将max
替换为返回第二大值的函数:
a.agg <- aggregate(X.2 ~ X.1, a, function(x) sort(x, decreasing=T)[2])
(df.second <- merge(a.agg, a))
# X.1 X.2 X
# 1 Z1 13 H
# 2 Z2 9 J
# 3 Z3 15 E
a.agg您只需将max
替换为返回第二大值的函数:
a.agg <- aggregate(X.2 ~ X.1, a, function(x) sort(x, decreasing=T)[2])
(df.second <- merge(a.agg, a))
# X.1 X.2 X
# 1 Z1 13 H
# 2 Z2 9 J
# 3 Z3 15 E
a.agg Elagant solution@josilber!我现在发现了一个简单的例子:a.second.max%groupby(X.1)%>%filter(秩(-X.2,ties.method=“min”)==2),但我更喜欢urs!问候和感谢!Patricklagant solution@josilber!我现在发现了一个简单的例子:a.second.max%groupby(X.1)%>%filter(秩(-X.2,ties.method=“min”)==2),但我更喜欢urs!问候和感谢!Patrik这是一个比公认答案更快更好的回答,聚合(公认答案)可能比数据慢。表这是一个比公认答案更快更好的回答,聚合(公认答案)可能比数据慢。表