合并两个不同维度的数据帧,没有 NAs

Merge two dataframes of different dimension, without having NAs

我正在尝试在 R 上合并两个不同的数据帧。一个数据帧包含大约 5000 个观测值 (dataframeA),而另一个数据帧包含 500 个 (dataframeB)。数据是关于邮政编码的。使用包 zipcodeR 我从 dataframeA 创建了 dataframeB。事实上,在 dataframeA 的所有 5000 个观测值中,只有 500 个不同的邮政编码。现在我想从 dataframeB 中提取城市,并使用相应的邮政编码将其添加到 dataframeA 的每一行。我该怎么做?

这是我正在做的一个小例子:

# DataframeA
ID   ZIP
1    91107
2    90089
3    91107
4    91107
5    94720

# DataframeB
zipcode  city
90089    Los Angeles
91107    Pasadena
94720    Berkeley

# FINAL DATASET I WANT
ID   ZIP     city
1    91107   Pasadena
2    90089   Los Angeles
3    91107   Pasadena
4    91107   Pasadena
5    94720   Berkeley

你知道怎么做吗? 我读了一些关于 if-else 的内容,但没有什么好的结果。 另一种选择是: dataframeA$city <- dataframeA$city[match(dataframeA$ZIP, dataframeB$city)],但它不起作用。

您可以使用几种解决方案。我推荐使用 dplyr 的第二种解决方案,但是第一种解决方案也可以正常工作。

df1 <- data.frame(
  ID = 1:5,
  ZIP = c(91107,
          90089,
          91107,
          91107,
          94720)
)

df2 <- data.frame(
  zipcode = c(90089,
              91107,
              94720),
  city = c("Los Angeles",
           "Pasadena",
           "Berkeley")
)

# Base R
merge(df1, df2, by.x = "ZIP", by.y = "zipcode")
#>     ZIP ID        city
#> 1 90089  2 Los Angeles
#> 2 91107  1    Pasadena
#> 3 91107  3    Pasadena
#> 4 91107  4    Pasadena
#> 5 94720  5    Berkeley

# dplyr/tidyverse
library(dplyr)
df1 %>% 
  left_join(df2, by = c("ZIP" = "zipcode"))
#>   ID   ZIP        city
#> 1  1 91107    Pasadena
#> 2  2 90089 Los Angeles
#> 3  3 91107    Pasadena
#> 4  4 91107    Pasadena
#> 5  5 94720    Berkeley