9.1 简介
处理关系数据:
- 合并连接
- 筛选连接
- 集合操作
p116 练习题
- 需要起点、终点位置,地图 ||
答案: flights表格中的起点、终点位置,airports表格中的经度和纬度,然后把两个连接起来 - weather表格中的origin和airports表格中的faa是一致的
- 两个表格中的年份、月份、日期匹配
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表的观测
网友评论