按组查找第二大元素
Find second largest element by group
在我的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 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)
我想按组查找数据集的最大值和第二大;这意味着我想通过频率 (X.2) 确定 X.1 中 X 的最大值和第二大值。对我有用的按组识别最大值的代码是:
a.agg <- aggregate(X.2 ~ X.1, a, max)
(df.max <- merge(a.agg, a))
# X.1 X.2 X
# 1 Z1 21 C
# 2 Z2 16 H
# 3 Z3 23 B
现在,下一步是根据频率变量X.2按组(X,X.1)找到变量X的第二大出现值。
结果应该是 3 行(因为 X.1 有 3 个值)通过 X.1 和从 X.2 列中确定的第二大频率返回 X。
我们可以试试
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
替换为 returns 第二大值的函数:
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
在我的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 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)
我想按组查找数据集的最大值和第二大;这意味着我想通过频率 (X.2) 确定 X.1 中 X 的最大值和第二大值。对我有用的按组识别最大值的代码是:
a.agg <- aggregate(X.2 ~ X.1, a, max)
(df.max <- merge(a.agg, a))
# X.1 X.2 X
# 1 Z1 21 C
# 2 Z2 16 H
# 3 Z3 23 B
现在,下一步是根据频率变量X.2按组(X,X.1)找到变量X的第二大出现值。 结果应该是 3 行(因为 X.1 有 3 个值)通过 X.1 和从 X.2 列中确定的第二大频率返回 X。
我们可以试试
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
替换为 returns 第二大值的函数:
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