如何基于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`

这些点仅存在以允许将来扩展,应为空。

您没有正确说明一个论点?

猜你喜欢