作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。
邮箱:huang.tian-yuan@qq.com
有没有一些时候你想要给表格加一个新的列?本章将会介绍如何在表格中创建新的字段。但是首先我们要知道为什么要什么做,下面是可能的一些情况:
有时候需要构造一列全部是0或1的数列,或者是给每一个记录赋予一个不同的ID;
购物数据中,含有单价和数量,需要计算交易额,然后加入到表格中;
我们数据中有年月日的数据,我们需要把它们拼接成一个字符格式,比如,2018年10月10日,我们需要表示为20181010或者2018/10/10;
在tidyverse中,我们可以用mutate函数给表格增加新的一列。下面将会分节介绍,首先载入我们需要的数据和包:
1library(tidyverse)
2library(nycflights1
这里举一个简单的例子,用iris数据集,增加一个完全为0的新列,我们会限制输出列为前六行,以免输出内容过多。
1iris %>%
2 mutate(zeros = 0) %>%
3 head
4## Sepal.Length Sepal.Width Petal.Length Petal.Width Species zeros
5## 1 5.1 3.5 1.4 0.2 setosa 0
6## 2 4.9 3.0 1.4 0.2 setosa 0
7## 3 4.7 3.2 1.3 0.2 setosa 0
8## 4 4.6 3.1 1.5 0.2 setosa 0
9## 5 5.0 3.6 1.4 0.2 setosa 0
10## 6 5.4 3.9 1.7 0.4 setosa 0
可以看到我们已经新增了一列,名字叫做zeros,里面的值全部是0。 SQL代码如下:
1<SQL> SELECT `Sepal.Length`, `Sepal.Width`, `Petal.Length`, `Petal.Width`, `Species`, 0.0 AS `zeros`
2FROM `iris`
本例会用到flights数据,这个表中包含了航班的起飞时间(dep_time)和到达时间(arr_time),如果需要知道中间经理了多长时间,我们需要将两者相减。我们会先把两列取出来,然后再构造新的列:
1flights %>%
2 select(dep_time,arr_time) %>%
3 mutate(time = arr_time - dep_time)
4## # A tibble: 336,776 x 3
5## dep_time arr_time time
6## <