R语言笔记(五):数据转换(dplyr)

如题所述

数据处理主要内容包括:

本文我们将深入了解数据转换的相关知识,相关链接可参考笔记(四)。

如有任何错误或需要补充的地方,欢迎各位高手不吝赐教,作者会持续进行更新!

2. 数据转换

在这一部分,我们将分别介绍R语言在处理数据转换时所使用的base包与dplyr包中的函数。

2.1 筛选(subset/filter/select)

筛选函数包括x:向量(vector),矩阵(matrix)或数据框(dataframe)subset:目标行符合的条件select:目标列的序数。

以下是一些筛选函数的例子:

四种函数仅适用于dataframe结构的筛选,其中filter()与slice()用于筛选行,filter()根据条件进行筛选,slice()根据行序数进行筛选;select()与rename()用于筛选列,以下为R给出的例子。

【注】filter()函数的用法与subset()基本相似,区别在于subset()可以处理向量和矩阵,并且可以通过select参数直接筛选列,因此我们将主要介绍其他三种函数。

首先是slice()函数,用法相对简单,主要根据行序数进行筛选。

select()函数用法较多,但都非常简单,作者直接将dplyr包的examples复制过来了。

另附参考资料:【R语言】必学包之dplyr包

rename()函数主要用于变量重命名,select()也可以实现,区别在于rename()会返回所有列。

2.2 排序(order/arrange)

根据变量名对变量进行排序,可以通过手动进行排序;使用基本包中的order()排序;使用dplyr包中的arrange()排序。

以iris数据集为例:

2.3 转换(transform/mutate/transmute)

基本包中的transform()函数可以为数据框添加新的变量,也可以对已有的变量进行编辑/删除。dplyr包提供了两个添加新变量的函数,mutate()和transmute()。

三者区别在于,mutate()在transform()能添加新变量的基础上,可以同时使用刚添加的变量再创建其他变量;mutate()返回添加新变量后的新数据框,而transmute()仅返回新创建的变量。接下来我们来看看它们是如何实现变量编辑的:

2.4 分组与概括(group_by/summarise)

group_by()和summarise()都是dplyr包中的函数,处理对象都是数据框结构。

实际工作中,group_by()经常配合其他函数使用,因此,接下来我们先来举例介绍summarise()的用法和效果,再结合group_by()函数看看差异。

接下来结合group_by():

cyl变量表示气缸个数,取值为4, 6和8,因此对该变量进行分类便将dat分为三个group。再对其使用summarise()会对三个group分别计算其四分之一分位数、中位数、四分之三分位数。我们再试试对两个变量分组的效果:

gear表示的是forward gears(前齿轮?)个数,取值为3, 4和5;cyl有三个取值,因此对两个变量进行分组,应该会有3×3=9个group,但实际只有8个,是因为对八个气缸的车型没有4个forward gears,该组为空集,不填补缺失值就会被drop掉。分组后再使用summarise()的结果十分清晰,cyl作为第一分组依据,gear作为第二分组依据,分别对各组计算四分之一数、中位数和四分之三分位数。
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜