0

data:

   C  J        SD
 1: H  A       1230
 2: H  B       1000
 3: H  C        123
 4: H  D      12345
 5: H  E       4321
 6: P  C        234
 7: P  D         23
 8: P  E        587
 9: P  F        543

Required output:

 C  J        SD
1.H  D      12345
2.H  E       4321
3.H  A       1230
4.P  E        587
5.P  F        543
6.P  C        234

I have tried;

data %>% arrange(desc(`SD`)) %>% group_by( `C` ,`J`) %>%  top_n(3)

but not getting desired output.

Is any another way or I'm going wrong anywhere.

Ronak Shah
  • 377,200
  • 20
  • 156
  • 213
Madhur
  • 3
  • 3

2 Answers2

1

To get exactly what you want.

Df <- Df %>%arrange(desc(SD))%>%arrange(C) %>%group_by(C) %>% top_n(3)

Daman deep
  • 631
  • 3
  • 14
0

Group only by C value

library(dplyr)

data %>%  group_by(C) %>%  top_n(3, SD)

Also top_n is now superseded with slice_max/slice_min which can be used as -

data %>%  
  group_by(C) %>%  
  slice_max(SD, n = 3) %>%
  ungroup()
Ronak Shah
  • 377,200
  • 20
  • 156
  • 213