R:分组最小或最大

时间:2014-04-15 15:06:29

标签: r greatest-n-per-group

关于如何使用SQL获取分组最小值或最大值的帖子太多了。但你怎么在R?

做到这一点

我们说,您有以下数据框

ID | t | value
a | 1 | 3
a | 2 | 5
a | 3 | 2
a | 4 | 1
a | 5 | 5
b | 2 | 2
b | 3 | 1
b | 4 | 5

对于每个ID,我都不想要最小值,但是最小值的值。

ID | value
a | 3
b| 2

3 个答案:

答案 0 :(得分:5)

df是您的data.frame -

library(data.table)

setDT(df) # convert to data.table in place

df[, value[which.min(t)], by = ID]

输出 -

> df[, value[which.min(t)], by = ID]
   ID V1
1:  a  3
2:  b  2

答案 1 :(得分:3)

您正在寻找tapply

df <- read.table(textConnection("
ID | t | value
a | 1 | 3
a | 2 | 5
a | 3 | 2
a | 4 | 1
a | 5 | 5
b | 2 | 2
b | 3 | 1
b | 4 | 5"), header=TRUE, sep="|")

m <- tapply(1:nrow(df), df$ID, function(i) {
  df$value[i[which.min(df$t[i])]]
})
# a  b
#  3  2

答案 2 :(得分:0)

另外两个解决方案(使用sgibb的df):

sapply(split(df, df$ID), function(x) x$value[which.min(x$t)])

#a  b  
#3  2 

library(plyr)
ddply(df, .(ID), function(x) x$value[which.min(x$t)])

#  ID V1
#1 a   3
#2 b   2