数据分析中,我们最常接触的数据格式为数据框,而对数据框最常见的操作就是添加新的列,这时候我们就可以使用mutate函数来完成相应的工作。
我们演示中使用的数据集为gcookbook
里的drunk数据集。drunk数据集反应的是,1970年1月1日至6月27日期间因为醉酒被Tower Bridge和Lambeth Magistrate地方法院判处有罪的人数,数据是根据年龄和性别来进行分类的。
#install.packages("gcookbook")
> require(gcookbook)
> require(tidyverse)
Loading required package: gcookbook
> drunk
sex 0-29 30-39 40-49 50-59 60+
1 male 185 207 260 180 71
2 female 4 13 10 7 10
我们接下来演示一下,如何对数据进行添加新列的操作。
操作1: 根据文件的行数增加新的一列,并命名为rowid。
> require(tidyverse)
> drunk %>%
+ mutate(rowid = row_number())
sex 0-29 30-39 40-49 50-59 60+ rowid
1 male 185 207 260 180 71 1
2 female 4 13 10 7 10 2
操作2: 根据已有的列创造新的列(变量),新增变量放在数据框的最后边。
> drunk %>%
+ mutate(older_than_30 = `30-39`+ `40-49`+ `50-59` + `60+`,
+ older_than_40 = `40-49` + `50-59` + `60+`,
+ older_than_50 = `50-59` + `60+`)
sex 0-29 30-39 40-49 50-59 60+ older_than_30 older_than_40 older_than_50
1 male 185 207 260 180 71 718 511 251
2 female 4 13 10 7 10 40 27 17
需要解释一下的是,上面的类似于30-39
不是单引号,因为数字不能充当变量名,这么需要这么操作。通过上述操作,我们看到数据框确实添加了三列。
操作3: 根据已有的列创造新的列,并且仅仅保存新增变量,这是需要用到的函数是transmute()
> drunk %>%
+ transmute(older_than_30 = `30-39`+ `40-49`+ `50-59` + `60+`,
+ older_than_40 = `40-49` + `50-59` + `60+`,
+ older_than_50 = `50-59` + `60+`)
older_than_30 older_than_40 older_than_50
1 718 511 251
2 40 27 17
小结:
- %>%是tidyverse包里面用来进行管道化操作的函数。
- mutate()用来增加新的列,新增列通常在原数据框的最后面。
- transmute()函数用来仅仅保存新增的列。
网友评论