二、筛选连接
##semi_join(x, y) 保留x表中与y表中的观测相匹配的所有观测
##anti_join(x, y) 丢弃x表中与y表中的观测相匹配的所有观测
top_dest <- flights %>%
count(dest, sort = T) %>%
head(10) # 筛出最受欢迎的前10个目的地
flights %>%
filter(dest %in% top_dest$dest) # 这是一种筛选方法,但很难扩展到多个变量
flights %>%
semi_join(top_dest) # 这种筛选方法可以筛选多个变量
flights %>%
anti_join(planes, by = "tailnum") %>%
count(tailnum, sort = T) # 没有匹配到tailnum的统计
需要注意的问题
1.尽量寻找主键,而不是变量组合
2.确保主键没有缺失值
3.检查外键与主键是否相匹配
三、集合操作
intersect(x, y) # 返回既在x中,又在y中的观测
union(x, y) # 返x,y中唯一的观测
setdiff(x, y) # 返回在x表,但不在y表中的观测
df1 <- tribble(
~x, ~y,
1,1,
2,1,
3,2
)
df2 <- tribble(
~x, ~y,
1,1,
1,2,
2,3
)
intersect(df1, df2)
union(df1, df2)
setdiff(df1, df2)
setdiff(df2, df1)