主要概念
关系数据:存在于多个表中的数据。
键:连接每对数据表的变量,可以是单个变量,也可以是多个变量
主键:唯一标识其所在数据表中的观测(在这个表中只对应一个观测值)
外键:唯一标识另一个数据表中的观测(在另外一个表中只对应一个观测值)
# 验证是否为主键
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的语法
网友评论