如果 R 数据框中存在缺失值,则按组对 R 数据框列进行汇总。


如果 R 数据框中存在缺失值,可以使用 dplyr 包的 summarise_each 函数找到列值的总和,其中我们可以通过将 na.rm 参数设置为 TRUE 来删除缺失值。

由于数据框中将存在分组,因此同一个包的 group_by 函数将帮助 summarise_each 函数按组执行求和。查看下面的示例以了解其工作原理。

示例 1

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

Grp<-sample(c("I","II","III"),20,replace=TRUE)
Rate<-sample(c(NA,2,4),20,replace=TRUE)
df1<-data.frame(Grp,Rate)
df1

创建了以下数据框

   Grp Rate
1   II   2
2    I   4
3   II  NA
4   II   4
5   II   2
6    I  NA
7  III   2
8  III   4
9    I  NA
10   I  4
11 III  4
12  II  4
13  II NA
14   I  4
15 III  4
16 III  4
17 III  2
18  II NA
19 III  2
20 III  2

要加载 dplyr 包并在 df1 中汇总列以找到总和(忽略上述创建的数据框中缺失的值),请将以下代码添加到上述代码片段中 -

Grp<-sample(c("I","II","III"),20,replace=TRUE)
Rate<-sample(c(NA,2,4),20,replace=TRUE)
df1<-data.frame(Grp,Rate)
library(dplyr)
df1%%group_by(Grp)%%summarise_each(funs(sum(.,na.rm=TRUE)))
# A tibble: 3 x 2

输出

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

 Grp Rate
 <chr <dbl
1   I 12
2  II 12
3 III 24

示例 2

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

Class<-sample(c("First","Second","Third"),20,replace=TRUE)
Price<-sample(c(NA,1.25,2.75),20,replace=TRUE)
df2<-data.frame(Class,Price)
df2

创建了以下数据框

  Class Price
1 Third  1.25
2 First    NA
3 Third  1.25
4 Third  2.75
5 Second   NA
6 Second 1.25
7 Second 1.25
8 Third    NA
9 First  2.75
10 Second  NA
11 Second  NA
12 Second  NA
13 Third   NA
14 Third   NA
15 Third   NA
16 Third 2.75
17 First 2.75
18 Third   NA
19 Third 1.25
20 Third   NA

要汇总 df2 中的列以找到总和(忽略上述创建的数据框中缺失的值),请将以下代码添加到上述代码片段中 -

Class<-sample(c("First","Second","Third"),20,replace=TRUE)
Price<-sample(c(NA,1.25,2.75),20,replace=TRUE)
df2<-data.frame(Class,Price)
df2%%group_by(Class)%%summarise_each(funs(sum(.,na.rm=TRUE)))
# A tibble: 3 x 2

输出

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

 Class Price
  <chr <dbl
1 First   5.5
2 Second  2.5
3 Third  9.25

示例 3

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

Category<-sample(c("Small","Medium","Large"),20,replace=TRUE)
Quantity<-sample(c(NA,500,1000),20,replace=TRUE)
df3<-data.frame(Category,Quantity)
df3

创建了以下数据框

 Category Quantity
1 Large   1000
2 Small   1000
3 Small    500
4 Large    500
5 Small   1000
6 Medium    NA
7 Small    500
8 Medium   500
9 Large     NA
10 Medium  500
11 Medium   NA
12 Large    NA
13 Small   500
14 Medium 1000
15 Large    NA
16 Medium  500
17 Small   500
18 Medium   NA
19 Small    NA
20 Medium 1000

要汇总 df3 中的列以找到总和(忽略上述创建的数据框中缺失的值),请将以下代码添加到上述代码片段中 -

Category<-sample(c("Small","Medium","Large"),20,replace=TRUE)
Quantity<-sample(c(NA,500,1000),20,replace=TRUE)
df3<-data.frame(Category,Quantity)
df3%%group_by(Category)%%summarise_each(funs(sum(.,na.rm=TRUE)))
# A tibble: 3 x 2

输出

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

 Category Quantity
 <chr <dbl
1 Large  1500
2 Medium 3500
3 Small  4000

更新于: 2021年11月2日

429 次查看

启动您的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.