《数据科学:R语言实现》——3.6 过滤数据

本节书摘来自华章计算机《数据科学:R语言实现》一书中的第3章,第3.6节,作者 丘祐玮(David Chiu),更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.6 过滤数据

数据过滤对于希望分析部分数据而不是全部数据集的读者来说是最常见的需求。在数据库操作中,我们可以使用带有where语句的SQL命令获取数据子集。在R中,我们也可以使用方括号来执行过滤操作。

准备工作

按照3.3节“转换数据类型”教程,把导入数据的每个属性转换成合适的数据类型。同时按照3.2节“重命名数据变量”中的步骤,命名employees和salaries数据集的列名。

实现步骤

执行下列步骤,过滤数据。

1.首先,使用head和tail获取employees数据集的前3行和最后3行:
《数据科学:R语言实现》——3.6 过滤数据

2.你也可以使用方括号并给定从1到3的序列获取数据的前3行:
《数据科学:R语言实现》——3.6 过滤数据

3.你还可以指定要选取的列序号:

《数据科学:R语言实现》——3.6 过滤数据
《数据科学:R语言实现》——3.6 过滤数据

4.除了从数据集中抽取行、列序列,你也可以指定具体的行和列,通过索引向量抽取数据子集:
《数据科学:R语言实现》——3.6 过滤数据

5.如果你知道列的名字,也可以使用给定的名称向量选取列:
《数据科学:R语言实现》——3.6 过滤数据

6.另外,你可以使用反向索引排除一些列:
《数据科学:R语言实现》——3.6 过滤数据

7.你也可以使用in和!操作符排除一些属性:
《数据科学:R语言实现》——3.6 过滤数据

8.你还可以设置等号条件获取数据子集:
《数据科学:R语言实现》——3.6 过滤数据

9.你还可以使用比较操作符获取数据子集:
《数据科学:R语言实现》——3.6 过滤数据

10.另外,函数substr也可以抽取部分数据记录:
《数据科学:R语言实现》——3.6 过滤数据

11.正则表达式是另一种获取数据子集的有用而强大的工具:
《数据科学:R语言实现》——3.6 过滤数据

运行原理

在本教程中,我们介绍了如何使用R来过滤数据。在第1步中,我们使用函数head和tail查看前几行和后几行。函数head和tail会默认返回数据集的前6行和后6行数据。我们依然可以在函数的第2个输入参数中指定返回记录的行数。

除了使用函数head和tail,我们也可以使用方括号来获取数据子集。使用方括号时,逗号左边的值表示要抽取的行,逗号右边的值表示要抽取的列。在第2步中,我们介绍了可以通过在逗号左边给出从1到3的序列抽取数据集的前3行。如果我们不在逗号右边指定任何值,这意味着我们会抽取数据集的所有变量。或者,我们也可以在逗号右边指定相关列。 与第3步类似,我们可以通过在逗号右边给定序列,选取第2列到第4列的数据,或者使用给定的索引向量c(3,5)选取相关列。而且,我们还可以使用给定的属性名称向量c("first_name","last_name")选取相关列。

除了选择所需的变量,我们可以使用反向索引排除不需要的列。所以,我们可以在逗号右边放置-6来排除数据集的第6列。我们也可以使用in和!操作符排除某些列名下的数据。在第7步中,我们可以排除first_name和last_name属性下的数据。

而且,我们可以使用给定的条件来过滤数据,类似于SQL。这里,由于需要使用条件来过滤数据记录,我们应该在逗号左边放置过滤标准。所以,在第8~10步中,我们介绍了可以使用等号条件来过滤男性雇员数据,抽取薪水在60 000~70 000之间的数据,并使用函数substr获得前两个字母为Ge的雇员。最后,我们也可以使用函数grep和正则表达式,通过判断名称末尾是否为元音字母,获得雇员数据子集。

更多技能

除了使用方括号,我们也可以使用函数subset来获取数据子集。

1.我们可以选取雇员数据前3行的first_name和last_name:
《数据科学:R语言实现》——3.6 过滤数据

2.我们也可以设置条件,按照gender过滤数据:
《数据科学:R语言实现》——3.6 过滤数据

上一篇:oracle11g 安装过程


下一篇:《Cisco IPv6网络实现技术(修订版)》一2.4 在Cisco IOS软件技术上配置IPv6