使用plyr
require(plyr)
set.seed(45)
df <- data.frame(year=sample(2000:2012, 25, replace=T), score=sample(25))
ddply(df, .(year), summarise, max.score=max(score))
使用
data.table
require(data.table)
dt <- data.table(df, key="year")
dt[, list(max.score=max(score)), by=year]
使用aggregate
:
o <- aggregate(df$score, list(df$year) , max)
names(o) <- c("year", "max.score")
使用 ave
:
df1 <- df
df1$max.score <- ave(df1$score, df1$year, FUN=max)
df1 <- df1[!duplicated(df1$year), ]
编辑:如果有更多列,使用data.table解决方案将是最好的选择(我的意见 :))
set.seed(45)
df <- data.frame(year=sample(2000:2012, 25, replace=T), score=sample(25),
alpha = sample(letters[1:5], 25, replace=T), beta=rnorm(25))
dt <- data.table(df, key="year")
dt[, .SD[score %in% max(score)], by=year]
data.table
解决方案。 - Arun