美文网首页
R学习笔记(3):使用dplyr处理关系数据(1)

R学习笔记(3):使用dplyr处理关系数据(1)

作者: TOP生物信息 | 来源:发表于2019-04-11 01:30 被阅读0次
library(tidyverse)
library(nycflights13)
airlines #公司缩写码——公司名称
airports #faa机场编码——机场信息(名称、地理位置)
planes #tailnum飞机标识码——飞机信息
weather #纽约机场天气状况

1. 键

1.1 主键与外键

两张存在一定联系的表格,比如一张表格是“姓名、学号、专业、班级”,另一张表格是“学号、数学成绩、物理成绩、英语成绩”,变量(列名)“学号”可以称为“键”。在表1中“学号”叫做“主键”,在表2中就叫做“外键”;反之亦然。并且,键的选取要没有歧义,它在一个表中一个实际的值只能标识一行记录。

1.2 验证主键正确性
> planes %>% count(tailnum) %>% filter(n>1)
# A tibble: 0 x 2
# ... with 2 variables: tailnum <chr>, n <int>

2. 合并连接

举个栗子

> flights2 <- flights %>% select(year:day,hour,origin,dest,tailnum,carrier)
> flights2 %>% left_join(airlines,by = "carrier") #注意left_join()的用法
# A tibble: 336,776 x 9
    year month   day  hour origin dest  tailnum carrier name                    
   <int> <int> <int> <dbl> <chr>  <chr> <chr>   <chr>   <chr>                   
 1  2013     1     1     5 EWR    IAH   N14228  UA      United Air Lines Inc.   
 2  2013     1     1     5 LGA    IAH   N24211  UA      United Air Lines Inc.   
 3  2013     1     1     5 JFK    MIA   N619AA  AA      American Airlines Inc. 
2.1 内连接

只要两个观测的键是相等的,则形成匹配关系

x <- tribble(
  ~key,~val_x,
  1,"x1",
  2,"x2",
  3,"x3"
)
y <- tribble(
  ~key,~val_y,
  1,"y1",
  2,"y2",
  4,"y3"
)

> x %>% inner_join(y,by="key")
# A tibble: 2 x 3
    key val_x val_y
  <dbl> <chr> <chr>
1     1 x1    y1   
2     2 x2    y2 
2.2 外连接

外连接保留至少存在于一个表中的观测

  • 左连接:保留x中的全部观测
  • 右连接:保留y中的全部观测
  • 全连接:保留x和y中的全部观测
> x %>% left_join(y,by="key")
# A tibble: 3 x 3
    key val_x val_y
  <dbl> <chr> <chr>
1     1 x1    y1   
2     2 x2    y2   
3     3 x3    NA   
> x %>% right_join(y,by = "key")
# A tibble: 3 x 3
    key val_x val_y
  <dbl> <chr> <chr>
1     1 x1    y1   
2     2 x2    y2   
3     4 NA    y3   
> x %>% full_join(y,by = "key")
# A tibble: 4 x 3
    key val_x val_y
  <dbl> <chr> <chr>
1     1 x1    y1   
2     2 x2    y2   
3     3 x3    NA   
4     4 NA    y3
2.3 重复键
> x <- tribble(
+   ~key,~val_x,
+   1,"x1",
+   1,"x2",
+   2,"x3",
+   2,"x4"
+ )
> y <- tribble(
+   ~key,~val_y,
+   1,"y1",
+   2,"y2"
+ )
> left_join(x,y,by="key")
# A tibble: 4 x 3
    key val_x val_y
  <dbl> <chr> <chr>
1     1 x1    y1   
2     1 x2    y1   
3     2 x3    y2   
4     2 x4    y2   
> left_join(y,x,by = "key")
# A tibble: 4 x 3
    key val_y val_x
  <dbl> <chr> <chr>
1     1 y1    x1   
2     1 y1    x2   
3     2 y2    x3   
4     2 y2    x4
2.4 定义键列
  • by=NULL:所有共有变量作为键
  • by="str":共有变量str作为键
  • by=c("str_x"="str_y"):x表中的str_x变量和y表中的str_y变量作为主/外键
flights2 %>% left_join(weather)
flights2 %>% left_join(planes,by = "tailnum")
flights2 %>% left_join(airports,c("dest"="faa"))

相关文章

网友评论

      本文标题:R学习笔记(3):使用dplyr处理关系数据(1)

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