按组

时间:2015-12-14 07:39:25

标签: 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 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由X.1返回,第二个最大频率从列X.2中识别。

2 个答案:

答案 0 :(得分:2)

我们可以尝试

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

答案 1 :(得分:1)

您需要做的就是将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