本节书摘来自华章计算机《数据科学:R语言实现》一书中的第3章,第3.5节,作者 丘祐玮(David Chiu),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3.5 添加新的记录
熟悉数据库的读者,可能已经知道如何执行insert操作,给数据集添加一条新的记录。你也可以使用alter操作给表添加新的一列(属性)。在R中,你也可以执行insert和alter操作,但是要简单得多。我们会在本教程中介绍函数rbind和cbind,以便可以简单地使用R给当前数据集添加新的记录或者新的属性。
准备工作
按照3.3节“转换数据类型”教程,把导入数据的每个属性转换成合适的数据类型。同时按照3.2节“重命名数据变量”中的步骤,命名employees和salaries数据集的列名。
实现步骤
执行下列步骤,给数据集添加新的记录或者新的属性。
1.首先,使用rbind给employees添加新的记录:
2.我们可以把新的结果重新分配给数据框employees:
.
3.除了给原始数据集添加新的记录,我们也可以使用NA默认值添加新的position属性:
4.并且,我们可以根据当前日期和每一个雇员的birth_date添加新的age属性:
5.我们也可以使用函数transform添加多个变量:
运行原理
和数据库操作类似,我们可以根据数据集的样式(属性个数和每个属性的数据类型)给数据框添加新的记录。这里,我们首先介绍了如何使用函数rbind给数据框添加新的记录。由于雇员数据集有6列,我们可以使用函数rbind给数据集添加含有6个值的记录。在第一列中,emp_no是整型,所以我们不需要把输入值放在单引号中。对于属性first_name和last_name,因为已经把它们的类型转换成字符类型,所以我们可以自由地输入任何字符串作为一个值。对于最后一个gender属性,它是因子类型的,我们只能输入M或F作为值。
除了给目标数据集添加新的记录,我们还可以使用函数cbind添加新的变量。要达到这个目的,我们可以在调用cbind的时候给变量指定一个默认值。这里我们使用NA作为新的position属性的默认值 。我们也可以把其他列的计算结果拿来作为新的变量。在这个过程中,我们首先利用当前日期和和雇员的生日计算每个雇员的年龄。然后,我们使用美元符号把计算结果指定给新的变量age。除了使用美元符号指定新的变量,我们也可以使用函数transform,为employees数据集创建age、position和marital变量。
更多技能
除了使用美元符号和函数transform,我们也可以使用函数with创建新的变量: