#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