将两个数据帧合并为一个(1:n)

时间:2019-03-22 15:27:26

标签: r merge dplyr tidyverse

我有两个数据帧df1df2。这两个数据帧之间存在1:n关系,df2df1中的每个条目中都有多个条目。

我的目标是合并这两个数据框,以便重复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)

1 个答案:

答案 0 :(得分:1)

您可以使用本机R函数merge()进行此操作 https://www.statmethods.net/management/merging.html

或使用dplyr,由于更直观的类似sql的语法,我个人更喜欢dplyr: https://dplyr.tidyverse.org/reference/join.html?q=inner%20_%20j#join-types

由于您所指的是“ PK”和“ FK”,因此您可能更喜欢第二种选择,但是首先需要使用命令来安装和加载dplyr软件包

install.packages("dplyr")
library(dplyr)