如何在R数据框中找到每个组的绝对最大值?

要找到 R 数据框中每个组的绝对最大值,我们可以按照以下步骤操作 -

  • 首先,创建一个数据框。

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

示例 1

创建数据框

让我们创建一个数据框,如下所示 -

x<-rnorm(25)
Grp<-sample(LETTERS[1:10],25,replace=TRUE)
df<-data.frame(x,Grp)
df
输出结果

执行时,上述脚本生成以下内容output(this output will vary on your system due to randomization)-

      x       Grp
1   0.44813793 I
2  -0.42762853 F
3   1.84217825 D
4  -1.12661531 H
5   0.16377743 E
6  -0.30519746 F
7   1.68274689 D
8   0.20418659 C
9  -0.45494028 J
10 -0.80892645 G
11 -1.79420007 I
12  0.50946053 F
13  0.01846558 J
14  0.94334983 B
15 -0.41051915 A
16  0.85902521 I
17 -0.07774155 I
18 -0.14128810 C
19 -0.20461102 G
20  0.11894428 F
21  0.71705698 C
22  0.71409822 D
23  0.62682371 A
24 -0.03779485 F
25  0.34670072 A

找出每组的绝对最大值

使用 dplyr 包的 summarise_each 函数which.max以及 abs 函数在使用 group_by 分组后找到列 x 的每个组的绝对最大值,如下所示 -

x<-rnorm(25)
Grp<-sample(LETTERS[1:10],25,replace=TRUE)
df<-data.frame(x,Grp)
library(dplyr)
df %>% group_by(Grp) %>% summarise_each(funs(.[which.max(abs(.))]))
输出结果
# A tibble: 10 x 2
   Grp  x
 <chr> <dbl>
1  A   0.627
2  B   0.943
3  C   0.717
4  D   1.84
5  E   0.164
6  F   0.509
7  G  -0.809
8  H  -1.13
9  I  -1.79
10 J  -0.455

示例 2

创建数据框

让我们创建一个数据框,如下所示 -

DV<-sample(-20:20,25)
Gender<-sample(c("Male","Female"),25,replace=TRUE)
dat<-data.frame(DV,Gender)
dat
输出结果

执行时,上述脚本生成以下内容output(this output will vary on your system due to randomization)-

    DV Gender
1  -16 Male
2  -18 Female
3   20 Male
4   10 Female
5   1  Female
6  -1  Male
7   11 Male
8  -14 Female
9   4  Male
10 -17 Female
11 -9  Female
12   9 Female
13  12 Male
14   5 Male
15  -7 Male
16  14 Female
17   8 Female
18  19 Female
19 -8  Male
20 -19 Male
21  6  Male
22 18  Male
23 -3  Male
24 -5  Female
25 13  Female

找出每组的绝对最大值

使用 dplyr 包的 summarise_each 函数which.max以及 abs 函数在使用 group_by 分组后找到列 DV 的每个组的绝对最大值,如下所示 -

DV<-sample(-20:20,25)
Gender<-sample(c("Male","Female"),25,replace=TRUE)
dat<-data.frame(DV,Gender)
library(dplyr)
dat %>% group_by(Gender) %>% summarise_each(funs(.[which.max(abs(.))]))
输出结果
# A tibble: 2 x 2
Gender    DV
 <chr>   <int>
1 Female -20
2 Male    17

猜你喜欢