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

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