【发布时间】:2019-08-13 15:17:43
【问题描述】:
我有两个数据框 df1 和 df2。这两个数据帧之间存在 1:n 关系,df2 在df1 中的每个条目都有多个条目。
我的目标是合并这两个数据框,以便重复 df1 中的所有行并导入 df2 中的所有列。 df2中的外键(FK)指的是df1中的主键(PK)
# example data:
df1 <- data.frame(PK = c(1,2,3,4,5),
varA = sample(5, replace=T),
varB = sample(5, replace=T))
df2 <- data.frame(FK = c(1,1,2,2,3,3,4,4,4),
varC = seq(9),
varD = seq(9))
数据框应该是这样的:
PK | FK | varA | varB | varC | varD
1 1 ... ... 1 1
1 1 ... ... 2 2
2 2 ... ... 3 3
2 2 ... ... 4 4
3 3 ... ... 5 5
3 3 ... ... 6 6
4 4 ... ... 7 7
4 4 ... ... 8 8
4 4 ... ... 9 9
5 NA ... ... NA NA
df1 中的所有条目都应该存在,即使 df2 中没有相应的条目(此时 varC 和 varD 应该是 NA)
【问题讨论】:
-
带
dplyr包:df1 %>% left_join(df2, by = c("PK", "FK"))也许? -
你需要
merge(df1, df2)吗? -
另外,您想要的输出不匹配。
varC和varD是示例数据中 1:9 的序列。另外,当您使用sample时,请附上set.seed,以便我们复制您的数据 -
@DimitriPetrenko : 错误:
by不能包含 LHS 中缺少的连接列FK -
抱歉,
df1 %>% left_join(df2, by = c("PK" = "FK"))或left_join(df1, df2, by = c("PK" = "FK"))