在 R 数据框中查找分组大值和小值。

r programmingserver side programmingprogramming更新于 2025/4/9 8:07:17

要在 R 数据框中查找分组大值和小值,我们可以使用 dplyr 包的 mutate 函数,在 group_by 函数的帮助下可以轻松完成分组。

例如,如果我们有一个名为 df 的数据框,其中包含分组列 Grp 和数字列 Num,那么我们可以使用以下命令查找分组大值和小值 −

df%%group_by(Gp)%%mutate(Val=ifelse(Val==max(Val),"large","small"))

示例 1

以下代码片段创建了一个示例数据框 −

Group<-rep(LETTERS[1:10],each=2)
Dep_Var<-rpois(20,5)
df1<-data.frame(Group,Dep_Var)
df1

创建以下数据框

Group Dep_Var
1  A  11
2  A   5
3  B   2
4  B   2
5  C  10
6  C   8
7  D   6
8  D   5
9  E   3
10 E   5
11 F   3
12 F   8
13 G   8
14 G   2
15 H   3
16 H   3
17 I   7
18 I   5
19 J   3
20 J   5

要加载 dplyr 包并在上面创建的数据框中 df1 的 Group 列中为每个组查找 Dep_Var 的大值和小值,请将以下代码添加到上面的代码片段中 −

Group<-rep(LETTERS[1:10],each=2)
Dep_Var<-rpois(20,5)
df1<-data.frame(Group,Dep_Var)
library(dplyr)
df1%%group_by(Group)%%mutate(Magnitude=ifelse(Dep_Var==max(Dep_Var),"large","small"))
# A tibble: 20 x 3
# Groups: Group [10]

输出

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

  Group Dep_Var Magnitude
   <chr    <int   <chr
1    A     11    large
2    A      5    small
3    B      2    large
4    B      2    large
5    C     10    large
6    C      8    small
7    D      6    large
8    D      5    small
9    E      3    small
10   E      5    large
11   F      3    small
12   F      8    large
13   G      8    large
14   G      2    small
15   H      3    large
16   H      3    large
17   I      7    large
18   I      5    small
19   J      3    small
20   J      5    large

示例 2

以下代码片段创建了一个示例数据框 −

Class<-rep(1:10,each=2)
Score<-sample(20:50,20)
df2<-data.frame(Class,Score)
df2

创建以下数据框

Class Score
1   1   44
2   1   25
3   2   40
4   2   30
5   3   34
6   3   37
7   4   36
8   4   27
9   5   38
10  5   24
11  6   29
12  6   20
13  7   47
14  7   35
15  8   45
16  8   21
17  9   49
18  9   46
19 10   31
20 10   48

为了在上面创建的数据框中查找 df2 的 Class 列中每个组的 Score 的大值和小值,请将以下代码添加到上面的代码片段中 −

Class<-rep(1:10,each=2)
Score<-sample(20:50,20)
df2<-data.frame(Class,Score)
df2%%group_by(Class)%%mutate(Magnitude=ifelse(Score==max(Score),"large","small"))
# A tibble: 20 x 3
# Groups: Class [10]

输出

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

Class Score Magnitude
<int <int   <chr
1  1 44    large
2  1 25    small
3  2 40    large
4  2 30    small
5  3 34    small
6  3 37    large
7  4 36    large
8  4 27    small
9  5 38    large
10 5 24    small
11 6 29    large
12 6 20    small
13 7 47    large
14 7 35    small
15 8 45    large
16 8 21    small
17 9 49    large
18 9 46    small
19 10 31   small
20 10 48   large

相关文章