How to find the absolute maximum of each group in data.table object in R?

R ProgrammingServer Side ProgrammingProgramming

To find the absolute maximum of each group in data.table object in R, we can follow the below steps −

  • First of all, create a data.table object.

  • Then, use summarise_each function of dplyr package along with which.max and abs function to find the absolute maximum of each group after grouping with group_by.

Example 1

Create the data.table object

Let’s create a data.table object as shown below −

library(data.table)
Class<-sample(c("I","II","III"),25,replace=TRUE)
Response<-sample(-50:50,25)
DT1<-data.table(Class,Response)
DT1

Output

On executing, the above script generates the below output(this output will vary on your system due to randomization) −

   Class  Response
1:   II     25
2:    I    -29
3:   II     14
4:  III     35
5:  III    -3
6:    I    -10
7:  III    -22
8:  III    -28
9:   II    -15
10:   I    -41
11:   I    -8
12:  III   -1
13:   II   -11
14:   II     9
15:  III    45
16:   II   -23
17:    I    42
18:   II   -16
19:  III    44
20:   II   -47
21:  III    37
22:  III   -27
23:    I   -40
24:    I    18
25:   II     3
    Class Response

Find the absolute maximum of each group

Using summarise_each function of dplyr package along with which.max and abs function to find the absolute maximum of each group for column Response after grouping with group_by as shown below −

library(data.table)
Class<-sample(c("I","II","III"),25,replace=TRUE)
Response<-sample(-50:50,25)
DT1<-data.table(Class,Response)
library(dplyr)
DT1 %>% group_by(Class) %>% summarise_each(funs(.[which.max(abs(.))]))

Output

# A tibble: 3 x 2
 Class Response
 <chr> <int>
1 I      42
2 II    -47
3 III    45

Example 2

Create the data.table object

Let’s create a data.table object as shown below −

library(data.table)
Factor<-sample(c("F1","F2","F3","F4","F5"),25,replace=TRUE)
DV<-rnorm(25)
DT2<-data.table(Factor,DV)
DT2

Output

On executing, the above script generates the below output(this output will vary on your system due to randomization) −

    Factor     DV
1:  F5    -2.17198942
2:  F2     1.86828270
3:  F5    -0.13921697
4:  F1    -1.12527133
5:  F2     0.30994193
6:  F3    -0.85019956
7:  F1    -0.53960590
8:  F4     0.71515012
9:  F1     0.95894780
10: F1     0.69673391
11: F1     1.59025968
12: F1     0.54539870
13: F2     1.03472636
14: F2    -0.86223774
15: F5     1.09875408
16: F5     0.76012240
17: F2    -0.81212071
18: F4     0.16992534
19: F4     0.15300303
20: F3    -1.16854925
21: F5     0.83239589
22: F5    -0.43753269
23: F4     0.03010316
24: F3     0.15060870
25: F5    -0.84028548
    Factor    DV

Find the absolute maximum of each group

Using summarise_each function of dplyr package along with which.max and abs function to find the absolute maximum of each group for column DV after grouping with group_by as shown below −

library(data.table)
Factor<-sample(c("F1","F2","F3","F4","F5"),25,replace=TRUE)
DV<-rnorm(25)
DT2<-data.table(Factor,DV)
library(dplyr)
DT2 %>% group_by(Factor) %>% summarise_each(funs(.[which.max(abs(.))]))

Output

# A tibble: 5 x 2
  Factor DV
 <chr> <dbl>
1 F1   1.59
2 F2   1.87
3 F3  -1.17
4 F4   0.715
5 F5  -2.17
raja
Published on 09-Nov-2021 06:34:20
Advertisements