首页 > 解决方案 > 如何使用 R 在合并中的两个观察中使用来自一个观察的数据?

问题描述

我想合并两个表,但我需要用 x 名称填充一个观察的数据,用 y 名称(类似)来自另一个观察的信息。

oem <- c("BMW_", "BMW", "Honda", "Toyota", "Ford", "Audi")
> units <- c(215, 43, 324, 313, 350, 90)
> sales <- tibble(oem, units)
> sales
# A tibble: 6 x 2
  oem    units
  <chr>  <dbl>
1 BMW_     215
2 BMW       43
3 Honda    324
4 Toyota   313
5 Ford     350
6 Audi      90
> 
> oem2 <- c("BMW", "Honda", "Toyota", "Ford", "Audi")
> point_sales <- c(121, 231, 145, 132, 183)
> ps <- tibble(oem2,point_sales) 
> variables <- c("oem", "point_sales")
> names(ps) = variables
> ps
# A tibble: 5 x 2
  oem    point_sales
  <chr>        <dbl>
1 BMW            121
2 Honda          231
3 Toyota         145
4 Ford           132
5 Audi           183
> 
> 
> base <- merge(sales,ps, by = "oem", all = TRUE)
> base
     oem units point_sales
1   Audi    90         183
2    BMW    43         121
3   BMW_   215          NA
4   Ford   350         132
5  Honda   324         231
6 Toyota   313         145

我需要用“ps”的“BMW”(“point_sales”)中的信息填充我的“BMW_”行,因此,这意味着“BMW”的“ps”中的数据将针对“BMW”重复以及“BMW_”,避免“point_sales”列中的 NA。

我是新手,所以我考虑手动复制和粘贴数据,但我想知道根据 R 是否有另一种更“优雅”或更多的方法。

标签: r

解决方案


stringdist_inner_join您可以从fuzzyjoin包装中尝试。

fuzzyjoin::stringdist_inner_join(sales, ps, by = 'oem')

#  oem.x  units oem.y  point_sales
#  <chr>  <dbl> <chr>        <dbl>
#1 BMW_     215 BMW            121
#2 BMW       43 BMW            121
#3 Honda    324 Honda          231
#4 Toyota   313 Toyota         145
#5 Ford     350 Ford           132
#6 Audi      90 Audi           183

推荐阅读