R:如何使用具有重复值的键连接数据帧,并将第二帧的值复制到每个副本?

R: How to join dataframes with a key that has duplicate values, and COPY the second frame's values to each duplicate?

我正在尝试连接两个数据框。一个是房屋销售数据,另一个是与铁路的距离。我正在尝试使用包裹 ID 作为键来加入数据。销售数据中的地块 ID 将有多个值,因为地块已售出多次。我希望数据合并,这样距离值将针对每个包裹 ID 实例重复,就像这样。

数据框A:

ID Sale Date Sale Price
123 1/1/2020 320000
123 2/1/2021 429000
124 3/1/2019 190000
124 2/13/2020 280000
124 1/1/2022 419000
125 2/1/2021 300000
125 1/1/2022 390000
126 2/1/2021 310000

数据框 B:

ID Distance
123 1290
124 1809
125 370
126 976

我希望连接的数据框看起来像这样:

ID Sale Date Sale Price Distance
123 1/1/2020 320000 1290
123 2/1/2021 429000 1290
124 3/1/2019 190000 1809
124 2/13/2020 280000 1809
124 1/1/2022 419000 1809
125 2/1/2021 300000 370
125 1/1/2022 390000 370
126 2/1/2021 310000 976

为每个地块 ID 复制距离值。当我使用 left_join 时,我得到一个新数据帧,其行数比原始数据帧(这是一个问题)中的任何一个都多,并且距离有很多 NA 值(这是另一个问题)。我不明白为什么我的新数据框比最大的原始数据框大,而且我不知道如何做到这一点,以便在包裹 ID 的每个实例中重复距离,而不仅仅是复制一次,然后复制 NA .

当我搜索此问题的解决方案时,我发现的大多是删除重复行的方法,但我不想要这种方法。我希望为数据框 A 中的每个 ID 实例复制数据框 B 中的行。

您可以通过 dplyr 包中的 ID 使用 left_join。您可以使用以下代码:

df_A <- data.frame(ID = c(123, 123, 124, 124, 124, 125, 125, 126),
                   Sale_Date = c("1/1/2020", "2/1/2021", "3/1/2019", "2/13/2020", "1/1/2022", "2/1/2021", "1/1/2021", "2/1/2021"),
                   Sale_Price = c(320000, 429000, 190000, 280000, 419000, 300000, 390000, 310000))

df_B <- data.frame(ID = c(123, 124, 125, 126),
                   Distance = c(1290, 1809, 370, 976))

library(dplyr)
df_joined <- left_join(df_A, df_B, by = "ID")
df_joined

输出:

   ID Sale_Date Sale_Price Distance
1 123  1/1/2020     320000     1290
2 123  2/1/2021     429000     1290
3 124  3/1/2019     190000     1809
4 124 2/13/2020     280000     1809
5 124  1/1/2022     419000     1809
6 125  2/1/2021     300000      370
7 125  1/1/2021     390000      370
8 126  2/1/2021     310000      976