R语言ETL工程:插入与合并(add/bind)
作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。
邮箱:huang.tian-yuan@qq.com
本章要讲的是两个内容,第一个是如何在表格中插入新的数据,包括行和列;第二个是如何把格式相同的表格合并起来,包括行合并和列合并。两者操作和实现内容非常相似,在一定程度上能够相互置换使用,因此放在一章中合并讲解。本章内容较为简单,准备工作如下:
1library(tidyverse) 2 3## -- Attaching packages --------------------------- tidyverse 1.2.1 -- 4 5## √ ggplot2 3.1.0 √ purrr 0.2.5 6## √ tibble 2.0.1 √ dplyr 0.8.0.1 7## √ tidyr 0.8.1 √ stringr 1.3.1 8## √ readr 1.3.1 √ forcats 0.3.0 910## -- Conflicts ------------------------------ tidyverse_conflicts() --11## x dplyr::filter() masks stats::filter()12## x dplyr::lag() masks stats::lag()
插
入(add)
行插入(add_row)
我们先建立一个数据表:
1df <- tibble(x = 1:6, y = 6:1) 2df 3 4## # A tibble: 6 x 2 5## x y 6## <int> <int> 7## 1 1 6 8## 2 2 5 9## 3 3 410## 4 4 311## 5 5 212## 6 6 1
下面我们插入一行:
1df %>% 2add_row(x = 7, y = 0) 3 4## # A tibble: 7 x 2 5## x y 6## <dbl> <dbl> 7## 1 1 6 8## 2 2 5 9## 3 3 410## 4 4 311## 5 5 212## 6 6 113## 7 7 0
插入成功。有的时候我们想要插入到指定的位置,比如我们要把上面的内容插入到第三行,可以这么写:
1df %>% 2add_row(x = 7, y = 0,.before = 3) 3 4## # A tibble: 7 x 2 5## x y 6## <dbl> <dbl> 7## 1 1 6 8## 2 2 5 9## 3 7 010## 4 3 411## 5 4 312## 6 5 213## 7 6 1
这样,我们就把需要插入的行插入到第3行。如果想要插入到倒数第3行,可以这样操作:
1df %>% 2add_row(x = 7, y = 0,.after = 3) 3 4## # A tibble: 7 x 2 5## x y 6## <dbl> <dbl> 7## 1 1 6 8## 2 2 5 9## 3 3 410## 4 7 011## 5 4 312## 6 5 213## 7 6 1
只要我们插入的x和y的数量一致,我们可以插入任意多的行,不过要清楚每一行都是一一对应的,我们举个例子:
1df %>% 2add_row(x = 1:3, y = 3:1) 3 4## # A tibble: 9 x 2 5## x y 6## <int> <int> 7## 1 1 6 8## 2 2 5 9## 3 3 410## 4 4 311## 5 5 212## 6 6 113## 7 1 314## 8 2 215## 9 3 1
前面我们已经注意到,如果要插入行,就要对每一行所有的元素赋值,如果我们只插入x不插入y,那么其他部分会自动插入缺失值。例如:
1df %>% 2add_row(x = 1) 3 4## # A tibble: 7 x 2 5## x y 6## <dbl> <int> 7## 1 1 6 8## 2 2 5 9## 3 3 410## 4 4 311## 5 5 212## 6 6 113## 7 1 NA
列插入(add_column)
1df %>% 2add_column(z = 2:7) 3 4## # A tibble: 6 x 3 5## x y z 6## <int> <int> <int> 7## 1 1 6 2 8## 2 2 5 3 9## 3 3 4 410## 4 4 3 511## 5 5 2 612## 6 6 1 7
这里必须注意的是,列一定要是一个相同长度的向量才能够插入,否则会报错。不过,如果想要输入一个与表格相同长度的常数向量,可以直接简写为:
1df %>% 2add_column(z = 0) 3 4## # A tibble: 6 x 3 5## x y z 6## <int> <int> <dbl> 7## 1 1 6 0 8## 2 2 5 0 9## 3 3 4 010## 4 4 3 011## 5 5 2 012## 6 6 1 01314#等价于15df %>%16add_column(z = c(0,0,0,0,0,0)) #只是为了生动一点,熟悉的专家们可以直接用rep(0,6)1718## # A tibble: 6 x 319## x y z20## <int> <int> <dbl>21## 1 1 6 022## 2 2 5 023## 3 3 4 024## 4 4 3 025## 5 5 2 026## 6 6 1 0
合
并(bind)
行合并(bind_rows)
要让两个表格进行合并,先要条件就是两个表格必须有相同的列数,而且具有相同的列名称,这样才能够对应起来合并成一个表格。我们举个例子:
1df1 = tibble(a = 1:2, b = 3:4) 2df2 = tibble(a = 7:8, b = 9:10) 3 4df1 5 6## # A tibble: 2 x 2 7## a b 8## <int> <int> 9## 1 1 310## 2 2 41112df21314## # A tibble: 2 x 215## a b16## <int> <int>17## 1 7 918## 2 8 10
下面我们完成合并:
1df1 %>% 2bind_rows(df2) 3 4## # A tibble: 4 x 2 5## a b 6## <int> <int> 7## 1 1 3 8## 2 2 4 9## 3 7 910## 4 8 10
列合并(bind_cols)
两个表格的合并条件会宽松一点,那就是只要表格的行数相等即可,例子如下:
1df1 %>%2bind_cols(df2)34## # A tibble: 2 x 45## a b a1 b16## <int> <int> <int> <int>7## 1 1 3 7 98## 2 2 4 8 10
这里我们发现了一个有趣的现象,因为我们列名称是完全相同的,所以第二个表格的列名称会补上一个“1”。正常情况下,我们不希望合并到一个表格的列名称会发生重名现象,这是大家在实际工作中需要注意的。
小
结
本章我们介绍了如何插入行列,以及对表格进行行列合并,这些是表格操纵最基本的操作,需要牢牢把握。
——————————————
往期精彩:
现阶段硕士的困境:读博没决心,不读也闹心…
工作多少年,在哪个行业,可以拿到年薪50万+
gcIntermediate_航线图_必知必会
R语言中文社区2018年终文章整理(作者篇)
R语言中文社区2018年终文章整理(类型篇)
R语言ETL工程:插入与合并(add/bind)相关推荐
- R语言ETL工程系列:排序(arrange)
作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘.社交网络分析和机器学习等.希望与大家分享学习经验,推广并加深R语言在业界的应用. 邮箱:huang.tian-yuan@qq.com 前言 上篇介 ...
- R语言ETL工程:创建字段(mutate)
作者:黄天元,复旦大学博士在读,热爱数据科学与R,热衷推广R在工业界与学术界的应用.邮箱:huang.tian-yuan@qq.com.欢迎合作交流 有没有一些时候你想要给表格加一个新的列?本章将会介 ...
- 十八、R语言特征工程实战
特征工程是机器学习过程中和模型训练同样重要的部分,特征如何提取.如何处理.如何选择.如何使用都是特征工程的范畴,特征工程需要具备数据分析的能力,那些称为数据科学家的人一定是有很强的特征工程能力的人.R ...
- R语言两个dataframe纵向合并或者为dataframe添加数据行实战
R语言两个dataframe纵向合并或者为dataframe添加数据行实战 目录 R语言两个dataframe纵向合并或者为dataframe添加数据行实战
- left join 不重复_R语言ETL工程:连接(join)
作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘.社交网络分析和机器学习等.希望与大家分享学习经验,推广并加深R语言在业界的应用. 邮箱:huang.tian-yuan@qq.com 本章将会介绍 ...
- geo读取表达矩阵 RNA-seq R语言部分(表达矩阵合并及id转换)
geo读取表达矩阵 RNA-seq R语言 方法一:1.从geo页面直接下载表达矩阵,然后通过r读取表达矩阵 2.利用getgeo函数读取表达矩阵 3.利用geo自带的geo2r,调整p值为1,获取探 ...
- r语言把多个图合并在一张图_SAS 绘制亚组分析森林图
背景介绍 随着循证医学(evidence-based medicine)的兴起,森林图(forest plot)已经为人所广泛认识.当前,几乎所有的临床工作者都知道什么是森林图以及如何解读森林图的含义 ...
- R语言ETL系列:汇总(summarise)
作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘.社交网络分析和机器学习等.希望与大家分享学习经验,推广并加深R语言在业界的应用. 邮箱:huang.tian-yuan@qq.com 本章讲解如何 ...
- R语言处理单细胞表达矩阵合并拟细胞(pseudocell)对表达矩阵进行压缩
更新函数pseudo_cell可以处理更大的数据集合(100w以上) R-scripts-for-task/pseudo_cell func.r at main · Nh-code/R-scripts ...
- r语言把多个图合并在一张图_R语言绘图 | 折线图画法,如何画出你满意的图?
作者:丁点helper 来源:丁点帮你 上篇文章中,我们用世界银行的例子给大家介绍了散点图怎么画,那折线图呢? 绘制折线图 如果将散点图上的点从左往右连接起来,就会得到一个折线图.今天我们以R中自带的 ...
最新文章
- 7_2判断两个单链表是否相交,若相交,求出第一个交点
- PHP 5.4 的新特性
- 1、CSS Backgrounds(背景)
- C#中调用API函数RegisterHotKey注册多个系统热键
- 关于Git你必须知道的
- Android 启动界面的制作
- 微信无法连接到服务器(110087)),110087无法连接网络是什么意思
- 2019-03-22-算法-进化(环形链表)
- 【LeetCode笔记】剑指Offer 51. 数组中的逆序对(Java、分治)
- 分布式事务Seata的AT模式下两阶段提交原理
- 2019第一季度海外市场手机出货量报告:华为、小米逆势增长
- 华为透露中国首个开源基金会将于近期正式运营!
- Zabbix-server安装后的故障处理及Zabbix-agent的配置添加过程
- AngularJS的学习--ng-show/ng-hide/ng-if和ng-switch
- gerrit服务器邮箱设置(三)
- DSP中EALLOW,EDIS,EINT,DINT,ERTM,DRTM的作用
- java能做称重软件_java实现砝码称重
- html中3d哪个方向是x轴,详解用CSS绘制3D旋转立方体
- ABB 120 六轴机械手臂编程调试(四) 三菱plc控制器配套程序
- 22.裸板--I2C协议