如何在 R 的 data.table 对象中查找每个分组的绝对最大值?


为了在 R 的 data.table 对象中找到每个分组的绝对最大值,我们可以按照以下步骤操作:

  • 首先,创建一个 data.table 对象。

  • 然后,使用 dplyr 包的 `summarise_each` 函数以及 `which.max` 和 `abs` 函数,在使用 `group_by` 分组后查找每个分组的绝对最大值。

示例 1

创建 data.table 对象

让我们创建一个如下所示的 data.table 对象:

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

输出

执行上述脚本后,将生成以下输出(由于随机化,此输出可能因您的系统而异):

   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

查找每个分组的绝对最大值

使用 dplyr 包的 `summarise_each` 函数以及 `which.max` 和 `abs` 函数,查找 `Response` 列中每个分组的绝对最大值,分组方式如下所示:

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(.))]))

输出

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

示例 2

创建 data.table 对象

让我们创建一个如下所示的 data.table 对象:

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

输出

执行上述脚本后,将生成以下输出(由于随机化,此输出可能因您的系统而异):

    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

查找每个分组的绝对最大值

使用 dplyr 包的 `summarise_each` 函数以及 `which.max` 和 `abs` 函数,查找 `DV` 列中每个分组的绝对最大值,分组方式如下所示:

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(.))]))

输出

# 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

更新于:2021年11月9日

149 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.