1002 chapter 9 dplyr

9.1 简介

处理关系数据:

  • 合并连接
  • 筛选连接
  • 集合操作

p116 练习题

  1. 需要起点、终点位置,地图 ||
    答案: flights表格中的起点、终点位置,airports表格中的经度和纬度,然后把两个连接起来
  2. weather表格中的origin和airports表格中的faa是一致的
  3. 两个表格中的年份、月份、日期匹配
    4.主要是日期,因为特定日期是节假日

9.3 键 keys

用于连接每对数据表的变量 → 键

  • 主键: 唯一标识所在数据表的观测 如plane$tailnum
  • 外键: 唯一标识另一个数据表的观测 如flights$tailnum
    -识别是否是主键 count()是否大于1
    -代理键

p118练习题

flights %>%
  arrange(year, month, day, sched_dep_time, carrier, flight) %>%
  mutate(flight_id = row_number()) %>%
  glimpse()
install.packages("Lahman::Batting")
Lahman::Batting %>%
group_by(playerID, yearID, stint) %>%
  filter(n() > 1) %>%
  nrow()

三者中的playerID应该是一致的
|| 答案:

  • Master: 主键是playerID
    -Batting: 主键是playerID,yearID, stint
    外键是Master$playerID
  • Salaries:主键yearID, teamID, playerID,外键 playerID = Master$playerID

画图的程序看不懂额,决定先不求甚解。。

9.4 合并连接

合并连接--连接两个表格

  • 内连接:没有匹配的结果不会包含在结果中
  • 外连接:保留至少存在一个表中的观测(左连接、右连接、全连接) 左、右连接用NA填充没有观测值
  • 左连接比较常用(我以为是全连接用的比较多)
  • inner_join(), left_join(), right_join(), full_join(x, y, by = "key")

定义键列

  • by = NULL, 连接存在两个表格的所有变量 →自然连接
  • 字符向量 by = “x”,只使用某些公共变量
  • 命名字符向量 by = c("a" = "b")

p126 练习题

avg_dest_delays <-
  flights %>%
  group_by(dest) %>%
  # arrival delay NA's are cancelled flights
  summarise(delay = mean(arr_delay, na.rm = TRUE)) %>%
# na.rm = TRUE, 在计算前除去缺失值,缺失值即被取消的航班
  inner_join(airports, by = c("dest" = "faa"))

其他实现方式

inner_join(x,y) → merge(x,y)
left_join(x,y) → merge(x,y,all.x = TRUE)
right_join(x,y) → merge(x,y,all.y = TRUE)
full_join(x,y) → merge(x,y,all.x = TRUE, all.y = TRUE)

9.5筛选连接

  • semi_join(x,y) 保留
  • anti-join(x,y)丢弃

9.6 连接中的问题

  • 找出主键变量
  • 确保主键中没有缺失值
  • 检查外键是否与另一张表中的主键相匹配

9.7 集合操作

intersect(x,y)
union(x,y)
setdiff(x,y) #返回在x表,但不在y表的观测

推荐阅读更多精彩内容