R语言ETL工程:插入与合并(add/bind)

栏目: R语言 · 发布时间: 4年前

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.0purrr 0.2.5
6## √ tibble 2.0.1dplyr 0.8.0.1

7## √ tidyr 0.8.1stringr 1.3.1
8## √ readr 1.3.1forcats 0.3.0

9
10## -- 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 4
10## 4 4 3
11## 5 5 2
12## 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 4
10## 4 4 3
11## 5 5 2
12## 6 6 1
13## 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 0
10## 4 3 4
11## 5 4 3
12## 6 5 2
13## 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 4
10## 4 7 0
11## 5 4 3
12## 6 5 2
13## 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 4
10## 4 4 3
11## 5 5 2
12## 6 6 1
13## 7 1 3
14## 8 2 2
15## 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 4
10## 4 4 3
11## 5 5 2
12## 6 6 1
13## 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 4
10## 4 4 3 5
11## 5 5 2 6
12## 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 0
10## 4 4 3 0
11## 5 5 2 0
12## 6 6 1 0
13
14#
等价于

15df %>%
16add_column(z = c(0,0,0,0,0,0)) #只是为了生动一点,熟悉的专家们可以直接用rep(0,6)
17
18#
# # A tibble: 6 x 3

19## x y z
20## <int> <int> <dbl>
21## 1 1 6 0
22## 2 2 5 0
23## 3 3 4 0
24## 4 4 3 0
25## 5 5 2 0
26## 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 3
10## 2 2 4
11
12df2
13
14#
# # A tibble: 2 x 2

15## a b
16## <int> <int>
17## 1 7 9
18## 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 9
10## 4 8 10

列合并(bind_cols)

两个表格的合并条件会宽松一点,那就是只要表格的行数相等即可,例子如下:

1df1 %>%
2bind_cols(df2)
3
4#
# # A tibble: 2 x 4

5## a b a1 b1
6## <int> <int> <int> <int>
7## 1 1 3 7 9
8## 2 2 4 8 10

这里我们发现了一个有趣的现象,因为我们列名称是完全相同的,所以第二个表格的列名称会补上一个“1”。正常情况下,我们不希望合并到一个表格的列名称会发生重名现象,这是大家在实际工作中需要注意的。

本章我们介绍了如何插入行列,以及对表格进行行列合并,这些是表格操纵最基本的操作,需要牢牢把握。

——————————————

往期精彩:

R语言ETL工程:插入与合并(add/bind) 天善智能 每日一道算法题,打卡学习 小程序

R语言ETL工程:插入与合并(add/bind)

本文由R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。

转载、引用前需联系作者,并署名作者且注明文章出处。

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序化广告实战

程序化广告实战

吴俊 / 机械工业出版社 / 2017-8-15 / 79.00元

中国程序化广告领域领袖级专家,私有化程序购买领域的布道者的一线实战笔记,宋星等近20位专家联袂推荐。从业务和技术双重视角系统讲解程序化广告的理论、知识、实践方法和关键要点。一起来看看 《程序化广告实战》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具