5.dplyr处理关系数据(2)

二、筛选连接

##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)

你可能感兴趣的:(5.dplyr处理关系数据(2))