作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。
邮箱:huang.tian-yuan@qq.com
前文推送:
集合运算与连接其实有相似之处,但是连接是针对特定列(主键)来对表格进行连接,而集合运算则直接对记录(entry)进行运算。简单来说,就是以行为单位进行运算。假设表格A与表格B有相同的列名称,它们其实数据的来源是相同的,但是记录的东西有重复的部分,又有不一样的地方。如果我们想要知道哪些部分重复了,就需要求两个数据的交集。简单来讲,本章就是要讲数据记录的“交、并、补”运算。具体的运算逻辑如下图所示:
集合运算基本逻辑
内容比较简单,我们直接上例子。本章用到的数据集主要是mtcars,我们把它转化为tibble然后进行演示。环境准备如下:
1library(tidyverse)
2mtcars %>%
3rownames_to_column(var = "type") %>% #把行名称转为其中一列
4as_tibble() -> mtcars1 #转化为tibble格式
5
6mtcars1
7
8## # A tibble: 32 x 12
9## type mpg cyl disp hp drat wt qsec vs am gear carb
10## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
11## 1 Mazda~ 21 6 160 110 3.9 2.62 16.5 0 1 4 4
12## 2 Mazda~ 21 6 160 110 3.9 2.88 17.0 0 1 4 4
13## 3 Datsu~ 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
14## 4 Horne~ 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
15## 5 Horne~ 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
16## 6 Valia~ 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
17## 7 Duste~ 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
18## 8 Merc ~ 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
19## 9 Merc ~ 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
20## 10 Merc ~ 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
21## # ... with 22 more rows
这样还不能够满足我们距离的需要,现在我们对这个数据集取两个子集,一个是从第1到第6列,第二个是从第3到第8列,分别存在变量a和变量b中。
1mtcars1 %>%
2slice(1:6) -> a
3
4mtcars1 %>%
5slice(3:8) -> b
6
7a
8
9## # A tibble: 6 x 12
10## type mpg cyl disp hp drat wt qsec vs am gear carb
11## <