Как использовать данные одного наблюдения в двух наблюдениях в слиянии с R?

#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
 

Мне нужно заполнить строку «BMW_» в базе информацией из «BMW» «ps» («point_sales»), поэтому это означает, что данные из «ps» «BMW» будут повторяться для «BMW», а также для «BMW_», избегая NA в столбце «point_sales».

Я новичок, поэтому я думаю о копировании и вставке данных вручную, но я хочу знать, есть ли другой способ, более «элегантный» или более подходящий для R.

Ответ №1:

Вы можете попробовать 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