R:在数据帧的子集中查找列的最大值

时间:2015-08-01 15:45:28

标签: r dataframe max subset plyr

我的数据框df包含IDYearValue1Value2Value3和21788928行。我需要按YearID对数据进行子集化,并找到该子集中的最大Value1,保存该行的其余信息,我需要对{的所有组合执行此操作{1}}和Year(年份从1982年到2013年, ID为1到28371)

我试图在双循环中做到这一点:

ID

但它需要很长时间。有更有效的方法吗?也许使用year<-seq(1982, 2013) cnt=1 for (i in 1:32) { for (j in 1:28371) A<-df[df$Year==year[i]&df$ID==j,] maxVal[cnt,]<-A[A$Value1==max(A$Value1),] cnt=cnt+1 } } ddply

2 个答案:

答案 0 :(得分:4)

带有aggregate的基础R解决方案:

prov <- aggregate(. ~ Year + ID, data = dat, FUN = max)

答案 1 :(得分:3)

您可以使用dplyr

library(dplyr)
dat %>% group_by(ID, Year) %>%
  summarise(mval=max(Value1)) -> result

plyr,保留所有其他列(并将最大值1重复为mval

ddply(dat, .(ID, Year), function(x) {
    transform(x[which.max(x$Value1),], mval=Value1)
  }, .drop=F)

数据

dat <- data.frame(ID=sample(1:10, 100, rep=T),
                  Year=sample(1995:2000, 100, rep=T),
                  Value1=runif(100))