r - 连接 R 中的三个表,每个表都有不同的键
问题描述
我有三个表:CUSTOMER(PK:CustomerNum)、RESERVATION(PK:CustomerNum 和 TripID NOT PK)和 TRIP(PK:TripID)。尝试使用 purr:reduce。
尝试了以下代码。
tables <- list(customer, reservation, trip)
reduce(tables, inner_join, by = c("CustomerNum", "TripID"))
错误:by
不能包含TripID
LHS 中缺少的连接列
解决方案
当每一步的列不同时,我们可以使用for
循环by
grp <- c("CustomerNum", "TripID")
out <- customer
for(i in seq_along(grp)) {
out <- inner_join(out, tables[[i+1]], by = grp[i])
}
out
# CustomerNum val TripID newInfo
#1 1 -0.5458808 4 *
#2 2 0.5365853 2 ****
然后select
是感兴趣的列
请注意,如果我们不提供by
,它将by
根据下面可重现的示例根据公共列名的可用性自动选择 。由于 OP 没有提供任何可重复的示例,因此情况尚不清楚
reduce(tables, inner_join)
#Joining, by = "CustomerNum" #### <-----
#Joining, by = "TripID" #### <-----
# CustomerNum val TripID newInfo
#1 1 -0.5458808 4 *
#2 2 0.5365853 2 ****
数据
set.seed(24)
customer <- data.frame(CustomerNum = 1:5, val = rnorm(5))
reservation <- data.frame(CustomerNum = 1:3, TripID = c(4, 2, 8))
trip <- data.frame(TripID = c(4, 9, 2), newInfo = c("*", "**", "****"))
tables <- list(customer, reservation, trip)
推荐阅读
- proxy - 为什么 200 次重写不能在 Netlify 上工作?
- java - Active Directory AD B2C android native msal 无法与 AD 连接
- css - 添加clipPath后svg不可见
- json - 应用带有 Marshmallow 序列化的 JSON Schema
- java - 让应用程序管理的事务在 JPA 和 WebSphere 上工作时遇到问题
- javascript - 由于在 js 移动到下一个 i 之前未调用 promise.then() 导致在循环中读取 excel 文件时出现问题
- python - 在 Python 中使用 Swagger Codegen API 测试程序的错误处理
- reactjs - 如何在构建期间将环境变量注入 React
- sas - 如何根据时间过滤器按两组计算行数?
- elasticsearch - Elasticsearch query_string 通配符不考虑长度