r - Filter grouped data -


i have data.frame looks this

 date                  mean    sum  max min saison jahr 1 1995-09-01 00:00:00 2.370833 56.9 7.4   0      s 1995 2 1995-09-01 01:00:00 2.225000 53.4 7.4   0      s 1995 3 1995-09-01 02:00:00 2.091667 50.2 7.4   0      s 1995 4 1995-09-01 03:00:00 1.929167 46.3 7.4   0      s 1995 5 1995-09-01 04:00:00 1.745833 41.9 7.4   0      s 1995 6 1995-09-01 05:00:00 1.558333 37.4 7.4   0      s 1995 .... 

with dplyr package able extract highest sum every saison , jahr:

group_by(.data = dataframe,jahr,saison) summarise(gjahrsaison_24, hoechsterniederschlag = max(sum)) 

do have idea how extract ten(!) highest sums every jahr , saison?

you can use slice arrange

library(dplyr) df1 %>%   group_by(jahr, saison) %>%   arrange(desc(sum)) %>%   slice(1:10) 

or filter min_rank/dense_rank

df1 %>%      group_by(jahr, saison) %>%     filter(dense_rank(sum)<=10) 

similar options using data.table are

library(data.table)#v1.9.5+ setdt(df1)[order(-sum), .sd[1:10], = .(jahr, saison)] 

or

 setdt(df1)[, .sd[frank(sum, ties.method='first') <=10], = .(jahr, saison)] 

or using sqldf

library(sqldf) sqldf('select * df1         rowid in           (select rowid df1                jahr = i.jahr , saison=i.saison               order sum desc               limit 10)  order i.jahr, i.saison, i.sum desc') 

or base r

df1[with(df1, ave(sum, saison, jahr, fun=function(x)                     rank(-x, ties.method='first'))<=10),] 

Comments