这里举一个简单的例子,用iris数据集,增加一个完全为0的新列,我们会限制输出列为前六行,以免输出内容过多。

 1iris %>%2  mutate(zeros = 0) %>%3  head4##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species zeros5## 1          5.1         3.5          1.4         0.2  setosa     06## 2          4.9         3.0          1.4         0.2  setosa     07## 3          4.7         3.2          1.3         0.2  setosa     08## 4          4.6         3.1          1.5         0.2  setosa     09## 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 35##    dep_time arr_time  time6##       <int>    <int> <int>7##  1      517      830   3138##  2      533      850   3179##  3      542      923   381
10##  4      544     1004   460
11##  5      554      812   258
12##  6      554      740   186
13##  7      555      913   358
14##  8      557      709   152
15##  9      557      838   281
16## 10      558      753   195
17## # ... with 336,766 more rows

这样一来我们就把飞行时间储存在time列中。事实上我们还可以这么表达:

 1flights %>%2  transmute(dep_time,arr_time,time = arr_time - dep_time)3## # A tibble: 336,776 x 34##    dep_time arr_time  time5##       <int>    <int> <int>6##  1      517      830   3137##  2      533      850   3178##  3      542      923   3819##  4      544     1004   460
10##  5      554      812   258
11##  6      554      740   186
12##  7      555      913   358
13##  8      557      709   152
14##  9      557      838   281
15## 10      558      753   195
16## # ... with 336,766 more rows

得到结果与上面一致。transmute函数的特点就是,不会保存数据表中原有的列,自动完成了select的功能。
SQL代码如下:

1<SQL> SELECT `dep_time`, `arr_time`, `arr_time` - `dep_time` AS `time`
2FROM (SELECT `dep_time`, `arr_time`
3FROM `flights`)

文本的拼接与拆分

这个例子中,我们来看flights数据,它包含了年(year)、月(month)、日(day)、起始点(origin)、终点(dest)的数据列,首先我们把这些列取出来存放到新的变量中,并进行观察:

 1flights %>%2  select(year,month,day,origin,dest) -> fl_ymd34fl_ymd5## # A tibble: 336,776 x 56##     year month   day origin dest 7##    <int> <int> <int> <chr>  <chr>8##  1  2013     1     1 EWR    IAH  9##  2  2013     1     1 LGA    IAH
10##  3  2013     1     1 JFK    MIA
11##  4  2013     1     1 JFK    BQN
12##  5  2013     1     1 LGA    ATL
13##  6  2013     1     1 EWR    ORD
14##  7  2013     1     1 EWR    FLL
15##  8  2013     1     1 LGA    IAD
16##  9  2013     1     1 JFK    MCO
17## 10  2013     1     1 LGA    ORD
18## # ... with 336,766 more rows

拼接

现在,我们想要把第一行的起始点和终点拼接为“EWR_IAH”的格式,放在名为origin_dest的列中,下面我们进行操作:

 1fl_ymd %>%2  mutate(origin_dest = str_c(origin,dest,sep = "_")) -> fl_ymd.134fl_ymd.15## # A tibble: 336,776 x 66##     year month   day origin dest  origin_dest7##    <int> <int> <int> <chr>  <chr> <chr>      8##  1  2013     1     1 EWR    IAH   EWR_IAH    9##  2  2013     1     1 LGA    IAH   LGA_IAH
10##  3  2013     1     1 JFK    MIA   JFK_MIA
11##  4  2013     1     1 JFK    BQN   JFK_BQN
12##  5  2013     1     1 LGA    ATL   LGA_ATL
13##  6  2013     1     1 EWR    ORD   EWR_ORD
14##  7  2013     1     1 EWR    FLL   EWR_FLL
15##  8  2013     1     1 LGA    IAD   LGA_IAD
16##  9  2013     1     1 JFK    MCO   JFK_MCO
17## 10  2013     1     1 LGA    ORD   LGA_ORD
18## # ... with 336,766 more rows

我们可以看到,使用mutate函数可以增加一列,而这一列通过str_c函数,把两列拼接起来,中间的分隔符号设定为下划线(“_“)。此外,我们可以用unite函数完成这个任务:

 1#等价于2fl_ymd %>%3  unite(col = origin_dest,origin,dest) -> fl_ymd.245fl_ymd.26## # A tibble: 336,776 x 47##     year month   day origin_dest8##    <int> <int> <int> <chr>      9##  1  2013     1     1 EWR_IAH
10##  2  2013     1     1 LGA_IAH
11##  3  2013     1     1 JFK_MIA
12##  4  2013     1     1 JFK_BQN
13##  5  2013     1     1 LGA_ATL
14##  6  2013     1     1 EWR_ORD
15##  7  2013     1     1 EWR_FLL
16##  8  2013     1     1 LGA_IAD
17##  9  2013     1     1 JFK_MCO
18## 10  2013     1     1 LGA_ORD
19## # ... with 336,766 more rows

unite中的col参数是新的列名称,后面可以放任意多的列,最后会把放进去的列都拼接起来。

unite函数是专门用来对不同列之间字符串进行拼接的函数,默认的间隔符号就是“_”,但是可以通过sep参数改变分隔符。此外,我们可以注意到,如果利用unite函数,原始的两列origin和dest会消失,而mutate则是单纯增加一列。

拆分

那么,如果我们想要把已经拼接好的数据拆分出来,应该怎么做呢?
我们现在就来对flm_ymd.2的origin_dest列进行拆分操作,这里我们会用到separate函数:

 1fl_ymd.2 %>%2  separate(col = origin_dest, into = c("origin","dest"))3## # A tibble: 336,776 x 54##     year month   day origin dest 5##    <int> <int> <int> <chr>  <chr>6##  1  2013     1     1 EWR    IAH  7##  2  2013     1     1 LGA    IAH  8##  3  2013     1     1 JFK    MIA  9##  4  2013     1     1 JFK    BQN
10##  5  2013     1     1 LGA    ATL
11##  6  2013     1     1 EWR    ORD
12##  7  2013     1     1 EWR    FLL
13##  8  2013     1     1 LGA    IAD
14##  9  2013     1     1 JFK    MCO
15## 10  2013     1     1 LGA    ORD
16## # ... with 336,766 more rows

我们可以看到,separate其实是unite的逆运算,col中赋值的是需要拆分的列名称,into则是拆分之后不同部分的名称。 separate也有sep参数,可以调整参数来根据特殊符号进行拆分,默认的拆分参数是所有非字母符号。如果大家要用中文的话,应该注意,一定要使用sep参数,也就是应该写成“fl_ymd.2 %>% separate(col =origin_dest, into = c(”origin“,”dest“),sep =”_“)”。

碧茂课堂精彩课程推荐:

1.Cloudera数据分析课;

2.Spark和Hadoop开发员培训;

3.大数据机器学习之推荐系统;

4.Python数据分析与机器学习实战;

详情请关注我们公众号:碧茂大数据-课程产品-碧茂课堂

现在注册互动得海量学币,大量精品课程免费送!

R语言ETL系列:创建字段(mutate)相关推荐

  1. R语言ETL系列:汇总(summarise)

    作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘.社交网络分析和机器学习等.希望与大家分享学习经验,推广并加深R语言在业界的应用. 邮箱:huang.tian-yuan@qq.com 本章讲解如何 ...

  2. R语言ETL工程系列:排序(arrange)

    作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘.社交网络分析和机器学习等.希望与大家分享学习经验,推广并加深R语言在业界的应用. 邮箱:huang.tian-yuan@qq.com 前言 上篇介 ...

  3. R语言学习系列之向量化计算

    ##R语言学习系列之向量化计算 本文主要讲解R语言向量化计算的原理及方法,希望对初学者能够提供帮助. ##一.向量化 什么是向量化计算呢?其实你可以简单的理解成这样:当我们在使用函数或者定义函数的时候 ...

  4. R语言gganimate包创建可视化gif动图、并使用anim_save函数保存可视化gif动图(gganimate export to gif)

    R语言gganimate包创建可视化gif动图.并使用anim_save函数保存可视化gif动图(gganimate export to gif) 目录

  5. R语言gganimate包创建可视化gif动图、可视化动图:ggplot2可视化静态散点图、gganimate包创建动态散点分面图(facet_wrap)动画基于transition_time函数

    R语言gganimate包创建可视化gif动图.可视化动图:ggplot2可视化静态散点图.gganimate包创建动态散点分面图(facet_wrap)动画基于transition_time函数 目 ...

  6. R语言gganimate包创建可视化gif动图、可视化动图:、gganimate包创建动态线型图动画基于transition_time函数、使用geom_point函数显示动画移动的数据点

    R语言gganimate包创建可视化gif动图.可视化动图:.gganimate包创建动态线型图动画基于transition_time函数.使用geom_point函数显示动画移动的数据点 目录

  7. R语言gganimate包创建可视化gif动图、可视化动图:创建动态散点图动画基于transition_time函数、使用shadow_wake函数配置动画的渐变效果(gradual falloff)

    R语言gganimate包创建可视化gif动图.可视化动图:创建动态散点图动画基于transition_time函数.使用shadow_wake函数配置动画的渐变效果(gradual falloff) ...

  8. R语言gganimate包创建可视化gif动图:gganimate包创建动态线型图动画基于transition_time函数、使用geom_point函数显示动画移动的数据点、并保留线图中的全部数据点

    R语言gganimate包创建可视化gif动图:gganimate包创建动态线型图动画基于transition_time函数.使用geom_point函数显示动画移动的数据点.并保留线图中的全部数据点 ...

  9. R语言gganimate包创建可视化gif动图:ggplot2可视化静态条形图(bar plot)、gganimate包创建动态条形图(bar plot)动画、基于transition_time函数

    R语言gganimate包创建可视化gif动图:ggplot2可视化静态条形图(bar plot).gganimate包创建动态条形图(bar plot)动画.基于transition_time函数 ...

  10. R语言ggplot2可视化创建堆叠的柱状图(stacked barplot)并且每个堆叠的柱状图都缩放到总和为100%实战:最后所有的堆叠的柱子都一样高、Y轴以百分比的形式来显示

    R语言ggplot2可视化创建堆叠的柱状图(stacked barplot)并且每个堆叠的柱状图都缩放到总和为100%实战:最后所有的堆叠的柱子都一样高.Y轴以百分比的形式来显示 目录

最新文章

  1. jQuery设置样式 css
  2. 苹果遭火速打脸:照片扫描AI被逆向工程,英特尔工程师发现漏洞
  3. 计算机权限常用英语词汇,计算机英语-计算机常用英语词汇表讲课稿.pdf
  4. 华为平板wps语音朗读_华为隐藏的这五大功能,个个都很实用,如果你不知道,钱就白花了...
  5. Spring cloud整合zookeeper
  6. springboot扫描组件_springboot多模块包扫描问题的解决方法
  7. html盒子有哪些属性,盒子模型有哪些属性 在html5中哪些元素具有盒子模型
  8. 2.1 物理层的基本概念
  9. PPT分享:用户画像场景与技术实现
  10. java quartz job_用 Quartz 进行作业调度
  11. Struts2 xml配置
  12. 【springBoot】之快速构建一个web项目
  13. 银河麒麟安装docker-compose体验
  14. 鸿蒙系统之铠甲勇士,国漫几部经典机甲排行,铠甲勇士落榜,第一名竟是抄袭漫威...
  15. matlab画动物轮廓图,MATLAB一维插值的应用实例—画左右手的轮廓图
  16. 美国大学计算机专业排名2019,2019年美国大学计算机排名
  17. 微视linux scsi驱动超时错误处理
  18. 打字速度单位wpm,kpm 是怎样计算的
  19. 【云星数据---Apache Flink实战系列(精品版)】:Apache Flink批处理API详解与编程实战025--DateSet实用API详解025
  20. Qt笔记(四十)之Qt打开笔记本摄像头

热门文章

  1. asp上传头像mysql_asp 会员头像上传 代码
  2. 山东大学计算机转专业2021,2021年山东大学大一新生转专业及入学考试相关规定...
  3. vs2017c语言playsound,VS2010播放.WAW音频文件
  4. 关于Javascript的学习心得
  5. 信息学奥赛一本通:1153:绝对素数
  6. 卷毛机器人抢大龙_EDG卷毛宣布退役:感谢WE和EDG的培养
  7. ch340g电路图5v和3.3v供电电路
  8. ArcGIS重装之旧软件卸不干净的问题
  9. Unity开发VR项目(四)—— 创建VR场景
  10. kata-container初探