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

主要概念

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

# 验证是否为主键
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))