美文网首页R数据科学
4.dplyr处理关系数据(1)

4.dplyr处理关系数据(1)

作者: 木制品_1125 | 来源:发表于2019-07-17 23:50 被阅读0次

    主要概念

    关系数据:存在于多个表中的数据。
    键:连接每对数据表的变量,可以是单个变量,也可以是多个变量
    主键:唯一标识其所在数据表中的观测(在这个表中只对应一个观测值)
    外键:唯一标识另一个数据表中的观测(在另外一个表中只对应一个观测值)

    # 验证是否为主键
    planes %>% 
      count(tailnum) %>%
      filter(n >1)
    

    本次主要学习三种操作:
    1.合并连接:向数据框中加入新变量,新变量的值是另一个数据框中的匹配观测
    2.筛选连接:根据是否匹配另一个数据框中的观测,筛选数据框中的观测
    3.集合操作:将观测作为集合元素来处理

    一、合并连接

    flights2 <- flights %>%
      select(year: day, hour, origin, dest, tailnum, carrier) %>%
      print()
    flights2 %>%
      select(-origin, -dest) %>%
      left_join(airlines, by = "carrier")
    
    x <- tribble(
      ~key, ~val_x,
      1, "x1",
      2, "x2",
      3, "x3"
    )
    
    y <- tribble(
      ~key, ~val_y,
      1, "y1",
      2, "y2",
      4, "y3"
    )
    
    1.内连接
    x %>%
      inner_join(y, by ="key")  # 没有匹配的行不会显示在结果中
    
    2.外连接
    x %>%
      left_join(y, by ="key")  # 保留x中所有观测
    x %>%
      right_join(y, by ="key")  # 保留y中所有观测
    x %>%
      full_join(y, by ="key")  # 保留x,y中所有观测
    
    3.一对多的情况(存在重复键)
    x <- tribble(
      ~key, ~val_x,
      1, "x1",
      2, "x2",
      2, "x3",
      1, "x4",
      4, "x5"
    )
    
    y <- tribble(
      ~key, ~val_y,
      1, "y1",
      2, "y2",
      3, "y3"
    )
    left_join(x, y, by = "key")  # 显示全部共有key的行的组合,保留x中独有观测值
    right_join(x, y, by = "key")  # 显示全部共有key的行的组合,保留y中独有观测值
    full_join(x, y, by = "key")  # 显示全部共有key的行的组合,保留x,y中所有观测值
    
    4.多对多的情况(存在重复键)
    x <- tribble(
      ~key, ~val_x,
      1, "x1",
      2, "x2",
      2, "x3",
      3, "x4",
      4, "x5"
    )
    
    y <- tribble(
      ~key, ~val_y,
      1, "y1",
      2, "y2",
      2, "y3",
      3, "y4",
      5, "y5"
    )
    
    left_join(x, y, by ="key")  # 显示全部共有key的行的组合,保留x中独有观测值
    right_join(x, y, by ="key") # 显示全部共有key的行的组合,保留y中独有观测值
    full_join(x, y, by ="key")  # 显示全部共有key的行的组合,保留x,y中所有观测值
    
    5.定义键列(by = "kye"的方式可以定义键列)
    ###(1)by = NULL 不写的时候默认使用所有的公共变量
    flights2 %>%
      left_join(weather)
    ###(2)当除定义key以外,两个数据框还有共同变量,那么这个变量名后面会加.x
    flights2
    planes
    flights2 %>%
      left_join(planes, by = "tailnum")
    ###(3)运用by = c("a" = "b")时指用x表中的a匹配y表中的b,输出结果使用x中的a表示
    flights2 %>% 
      left_join(airports, by = c("dest" = "faa"))
    
    6.其他实现方式
    ###(1)base::merge
    ###(2)SQL的语法
    

    相关文章

      网友评论

        本文标题:4.dplyr处理关系数据(1)

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