美文网首页人生几何?
45.关于关系型数据的开篇

45.关于关系型数据的开篇

作者: 心惊梦醒 | 来源:发表于2021-08-28 00:05 被阅读0次

【上一篇:44.用学到的tidy data整理工具处理tidyr::who数据集】
【下一篇:46.关于Mutating joins类函数和merge函数】

    彼此相关的数据在多张表中,这些相关的表就是关系型数据(relational data)。这是更实际的情况,所以我们需要一些可以处理关系型数据的函数。
    用来处理关系型数据的函数有三大类:
    1) Mutating joins:从另一个dataframe中根据匹配的observations为本dataframe添加新的变量。
    2)Filtering joins:根据是否与另一个表中的observations匹配,从一个dataframe中过滤observation
    3)Set operations:将observations视为集合操作。
    前面学习到的来自nycflights13包的flight数据表还有其他四个关联数据表:airlines、airports、planes、weather。他们与flight数据表的关系是:flight通过carrier变量与airlines关联;通过origin、dest变量与airports关联;通过tailnum与planes关联;通过year、month、day、hour和origin与weather关联。


    Keys是联系成对表格的变量,可以是一个,也可以是一组,这些变量唯一标识一个observation,也就是变量中的每个值唯一对应一个observation。如上述"flight通过carrier变量与airlines关联"中carrier就是一个key,"flights通过year、month、day、hour和origin与weather关联"中year、month、day、hour和origin是一组key。
    有两种类型的Key:
    1)primary key:在本表中唯一标识一个observation。例如planestailnum在planes表格中就是一个primary key,因为它唯一标识了plane表中的plane。     2)**foreign key**:在另外的表中唯一标识一个observation。例如flightstailnum就是一个foreign key,因为它在flights表中,将每架航班匹配唯一的plane。一个变量可以是primary key,也可以是foreign key。
    3)surrogate key:代理key,这种key的出现主要是因为有时候在table中找不到primary key,这时候就可以用mutate()或row_number()函数创建一个surrogate key。surrogate key 在你做完过滤后想在原始表中回溯原始数据的时候比较有用。
    一个表格中的primary key可以用类似如下命令验证:

> library(nycflights13)
> library(tidyverse)
> planes %>% count(tailnum) %>% filter(n>1)
# A tibble: 0 x 2
# ... with 2 variables: tailnum <chr>, n <int>

    表格中的primary key与另一个表格中的foreign key构成了一种关系,利用这种关系可以进行表格间的合并、过滤等。
    row_number()是dplyr包中的ranking类函数。

row_number(x)
x:是用来rank的向量。其中的NA会原样输出,如果需要将NA放在最大或最小的位置,需要先将其转成Inf或-Inf。
> x <- c(5, 1, 3, 2, 2, NA)
> row_number(x)
[1]  5  1  4  2  3 NA

    总结一下:举个例子,你有两个表格table1和table2,table1中是班级中每个人(人名所在列名为name)的性别(没有重名的人)、各科成绩等信息,table2中是全班所有人的家庭住址(人名所在列名为Name)。你的需求是从table2中获取学生的家庭住址并添加到table1中。那么,对table1来说name就是primary key,对应table2中的Name就是foreign key,你需要根据name和Name的对应关系将table2中住址列贴到table1中。你的另一个需求是提取table1中住在XX小区的学生的信息,那么,你需要先根据table2找出住在XX小区的学生,然后从table1中筛选出结果。
    后续的内容就是学习一些函数来解决以上两个需求的,详见下篇。

【上一篇:44.用学到的tidy data整理工具处理tidyr::who数据集】
【下一篇:46.关于Mutating joins类函数和merge函数】

相关文章

网友评论

    本文标题:45.关于关系型数据的开篇

    本文链接:https://www.haomeiwen.com/subject/tscyiltx.html