作者: 黄天元 ,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深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
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语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- PostgreSQL 批量插入, 更新和合并操作
- HashMap为何从头插入改为尾插入
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——插入
- 分组字符合并SQL语句 按某字段合并字符串之一(简单合并)
- HashMap之元素插入
- 插入排序
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Release It!
Michael T. Nygard / Pragmatic Bookshelf / 2007-03-30 / USD 34.95
“Feature complete” is not the same as “production ready.” Whether it’s in Java, .NET, or Ruby on Rails, getting your application ready to ship is only half the battle. Did you design your system to......一起来看看 《Release It!》 这本书的介绍吧!