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
我正在尝试连接两个数据框。一个是房屋销售数据,另一个是与铁路的距离。我正在尝试使用包裹 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