R语言ETL系列:创建字段(mutate)
这里举一个简单的例子,用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)相关推荐
- R语言ETL系列:汇总(summarise)
作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘.社交网络分析和机器学习等.希望与大家分享学习经验,推广并加深R语言在业界的应用. 邮箱:huang.tian-yuan@qq.com 本章讲解如何 ...
- R语言ETL工程系列:排序(arrange)
作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘.社交网络分析和机器学习等.希望与大家分享学习经验,推广并加深R语言在业界的应用. 邮箱:huang.tian-yuan@qq.com 前言 上篇介 ...
- R语言学习系列之向量化计算
##R语言学习系列之向量化计算 本文主要讲解R语言向量化计算的原理及方法,希望对初学者能够提供帮助. ##一.向量化 什么是向量化计算呢?其实你可以简单的理解成这样:当我们在使用函数或者定义函数的时候 ...
- R语言gganimate包创建可视化gif动图、并使用anim_save函数保存可视化gif动图(gganimate export to gif)
R语言gganimate包创建可视化gif动图.并使用anim_save函数保存可视化gif动图(gganimate export to gif) 目录
- R语言gganimate包创建可视化gif动图、可视化动图:ggplot2可视化静态散点图、gganimate包创建动态散点分面图(facet_wrap)动画基于transition_time函数
R语言gganimate包创建可视化gif动图.可视化动图:ggplot2可视化静态散点图.gganimate包创建动态散点分面图(facet_wrap)动画基于transition_time函数 目 ...
- R语言gganimate包创建可视化gif动图、可视化动图:、gganimate包创建动态线型图动画基于transition_time函数、使用geom_point函数显示动画移动的数据点
R语言gganimate包创建可视化gif动图.可视化动图:.gganimate包创建动态线型图动画基于transition_time函数.使用geom_point函数显示动画移动的数据点 目录
- R语言gganimate包创建可视化gif动图、可视化动图:创建动态散点图动画基于transition_time函数、使用shadow_wake函数配置动画的渐变效果(gradual falloff)
R语言gganimate包创建可视化gif动图.可视化动图:创建动态散点图动画基于transition_time函数.使用shadow_wake函数配置动画的渐变效果(gradual falloff) ...
- R语言gganimate包创建可视化gif动图:gganimate包创建动态线型图动画基于transition_time函数、使用geom_point函数显示动画移动的数据点、并保留线图中的全部数据点
R语言gganimate包创建可视化gif动图:gganimate包创建动态线型图动画基于transition_time函数.使用geom_point函数显示动画移动的数据点.并保留线图中的全部数据点 ...
- R语言gganimate包创建可视化gif动图:ggplot2可视化静态条形图(bar plot)、gganimate包创建动态条形图(bar plot)动画、基于transition_time函数
R语言gganimate包创建可视化gif动图:ggplot2可视化静态条形图(bar plot).gganimate包创建动态条形图(bar plot)动画.基于transition_time函数 ...
- R语言ggplot2可视化创建堆叠的柱状图(stacked barplot)并且每个堆叠的柱状图都缩放到总和为100%实战:最后所有的堆叠的柱子都一样高、Y轴以百分比的形式来显示
R语言ggplot2可视化创建堆叠的柱状图(stacked barplot)并且每个堆叠的柱状图都缩放到总和为100%实战:最后所有的堆叠的柱子都一样高.Y轴以百分比的形式来显示 目录
最新文章
- jQuery设置样式 css
- 苹果遭火速打脸:照片扫描AI被逆向工程,英特尔工程师发现漏洞
- 计算机权限常用英语词汇,计算机英语-计算机常用英语词汇表讲课稿.pdf
- 华为平板wps语音朗读_华为隐藏的这五大功能,个个都很实用,如果你不知道,钱就白花了...
- Spring cloud整合zookeeper
- springboot扫描组件_springboot多模块包扫描问题的解决方法
- html盒子有哪些属性,盒子模型有哪些属性 在html5中哪些元素具有盒子模型
- 2.1 物理层的基本概念
- PPT分享:用户画像场景与技术实现
- java quartz job_用 Quartz 进行作业调度
- Struts2 xml配置
- 【springBoot】之快速构建一个web项目
- 银河麒麟安装docker-compose体验
- 鸿蒙系统之铠甲勇士,国漫几部经典机甲排行,铠甲勇士落榜,第一名竟是抄袭漫威...
- matlab画动物轮廓图,MATLAB一维插值的应用实例—画左右手的轮廓图
- 美国大学计算机专业排名2019,2019年美国大学计算机排名
- 微视linux scsi驱动超时错误处理
- 打字速度单位wpm,kpm 是怎样计算的
- 【云星数据---Apache Flink实战系列(精品版)】:Apache Flink批处理API详解与编程实战025--DateSet实用API详解025
- Qt笔记(四十)之Qt打开笔记本摄像头
热门文章
- asp上传头像mysql_asp 会员头像上传 代码
- 山东大学计算机转专业2021,2021年山东大学大一新生转专业及入学考试相关规定...
- vs2017c语言playsound,VS2010播放.WAW音频文件
- 关于Javascript的学习心得
- 信息学奥赛一本通:1153:绝对素数
- 卷毛机器人抢大龙_EDG卷毛宣布退役:感谢WE和EDG的培养
- ch340g电路图5v和3.3v供电电路
- ArcGIS重装之旧软件卸不干净的问题
- Unity开发VR项目(四)—— 创建VR场景
- kata-container初探