如何在 R 数据框中根据分类变量求和?


查找分组均值是很常见的事情,但是如果我们进行逐步分析,那么当我们的数据集中存在分类变量时,也需要值的总和。这可以通过 dplyr 包的 `group_by` 和 `summarise_each` 函数轻松完成。

示例

考虑以下数据框

在线演示

> Group<-sample(LETTERS[1:4],20,replace=TRUE)
> Salary<-sample(21000:50000,20)
> Emp<-data.frame(Group,Salary)
> Emp

输出

Group Salary
1 D 28256
2 B 31092
3 A 23147
4 C 28209
5 B 37676
6 C 33374
7 D 44864
8 B 40152
9 A 25843
10 A 40946
11 D 23321
12 A 42854
13 C 36960
14 A 35285
15 B 44478
16 B 36173
17 C 35077
18 A 39319
19 D 49204
20 A 41597

加载 dplyr 包

> library(dplyr)

查找每个组的工资总和

示例

> Emp %>% group_by(Group) %>% summarise_each(funs(sum))
# A tibble: 4 x 2

输出

Group Salary
1 A 248991
2 B 189571
3 C 133620
4 D 145645
Warning message:
`...` is not empty.

我们检测到这些有问题的参数

* `needs_dots`

这些点仅用于允许将来的扩展,应该为空。

您是否错误指定了参数?

不用担心这里的警告消息,这是由于 dplyr 的版本造成的。我们的输出是正确的。如果您想忽略此警告,则需要从 CRAN 安装最新版本的 tibble。我们在这里展示这一点,因为您很可能会遇到同样的问题,但不一定。

让我们看看另一个例子

示例

在线演示

> x<-sample(c("India","USA","China","Canada"),20,replace=TRUE)
> y<-rpois(20,5)
> df<-data.frame(x,y)
> df

输出

x y
1 India 5
2 India 3
3 India 4
4 China 5
5 Canada 3
6 USA 5
7 Canada 7
8 China 6
9 China 4
10 USA 7
11 China 5
12 India 8
13 Canada 3
14 India 6
15 Canada 5
16 Canada 3
17 Canada 7
18 USA 12
19 China 2
20 India 5

示例

> df %>% group_by(x) %>% summarise_each(funs(sum))
# A tibble: 4 x 2

输出

x y
1 Canada 28
2 China 22
3 India 31
4 USA 24
Warning message:
`...` is not empty.

我们检测到这些有问题的参数

* `needs_dots`

这些点仅用于允许将来的扩展,应该为空。

您是否错误指定了参数?

更新于:2020年11月19日

2K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告