美文网首页
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