如何在 R 数据框中合并具有相同值的行?

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

要在 R 数据框中合并具有相同值的行,我们可以使用聚合函数。

例如,如果我们有一个名为 df 的数据框,其中包含两个分类列(分别为 C1 和 C2)以及一个数值列(Num),那么我们可以通过使用以下命令将 Num 中的值相加,从而合并 df 中的行:使用以下命令 −

aggregate(Num~.,df,FUN=sum)

示例 1

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

grp1<-sample(LETTERS[1:3],20,replace=TRUE)
grp2<-sample(letters[1:3],20,replace=TRUE)
Response<-rpois(20,5)
df1<-data.frame(grp1,grp2,Response)
df1

输出

创建以下数据框 −

 grp1 grp2 Response
1  A   b   2
2  A   c   2
3  B   a   8
4  B   c   7
5  C   a   7
6  C   b   6
7  C   b   3
8  B   c   6
9  A   a   7
10 A   c   7
11 C   a  11
12 A   b   7
13 B   c   4
14 A   c   2
15 B   a   2
16 B   c   2
17 A   b   2
18 B   c   5
19 C   a   4
20 C   b   2

为了通过查找 Response 的总和来合并 df1 的行,请将以下代码添加到上面的代码片段中 −

grp1<-sample(LETTERS[1:3],20,replace=TRUE)
grp2<-sample(letters[1:3],20,replace=TRUE)
Response<-rpois(20,5)
df1<-data.frame(grp1,grp2,Response)
aggregate(Response~.,df1,FUN=sum)

输出

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

 grp1 grp2 Response
1  A   a    7
2  B   a   10
3  C   a   22
4  A   b   11
5  C   b   11
6  A   c   11
7  B   c   24

示例 2

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

factor1<-sample(c("Male","Female"),20,replace=TRUE)
factor2<-sample(c("I","II","III"),20,replace=TRUE)
Score<-sample(1:50,20)
df2<-data.frame(factor1,factor2,Score)
df2

创建以下数据框 −

factor1  factor2 Score
1  Female III    32
2  Male   III    18
3  Male   III    21
4  Male   III    49
5  Male     I    38
6  Female III     6
7  Male     I     7
8  Female   I    44
9  Female III    30
10 Female   I    26
11 Male    II    43
12 Male   III    41
13 Female   I     4
14 Female   I    33
15 Male     I    15
16 Female  II    13
17 Female  III   19
18 Female  III   46
19 Male     II   17
20 Female    I   31

为了通过计算 Score 的总和来合并 df2 的行,请将以下代码添加到上面的代码片段中 −

factor1<-sample(c("Male","Female"),20,replace=TRUE)
factor2<-sample(c("I","II","III"),20,replace=TRUE)
Score<-sample(1:50,20)
df2<-data.frame(factor1,factor2,Score)
aggregate(Score~.,df2,FUN=sum)

输出

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

   factor1 factor2 Score
1  Female   I      138
2  Male     I       60
3  Female  II       13
4  Male    II       60
5  Female III      133
6  Male   III      129

相关文章