Могу ли я сопоставить и заменить данные, если совпадают только несколько символов? - PullRequest
0 голосов
/ 24 марта 2020

Я хочу создать карту. И имена моих наборов данных не совпадают точно с именами шейп-файлов. Например:

Набор данных 1:

Name_district Unmployment_rate    
Amatali 101
Amtli 111
Aamatali 111
Bamna 122
Baamna 111
Baamuuna 222
B.Baria 222
Brahammanbaria 221

Данные формы:

Name_district Shape_polygon    
Amtali 101
Bamuna 122
Bramhanbaria 222

Если я использую inner_join, карта данных не будет работать, потому что мне нужно точное имя шейп-файла в файле данных.

У меня есть круглые 12k наблюдений в Dataset1 для 5000 наблюдений шейп-файлов. Name_district написан неправильно, поэтому он равен 12 КБ, а уникальное значение должно быть около 5 КБ.

Я хотел бы знать, есть ли какая-либо функция, которую я мог бы создать, где будет Name_district заменяется на точное имя из шейп-файла, если Name_district в наборе данных соответствует 50% -60% правильному имени шейп-файла.

1 Ответ

0 голосов
/ 25 марта 2020

Не могли бы вы попробовать fuzzy_join? Вы также можете настроить максимальное расстояние (max_dist) для использования при присоединении.

library(fuzzyjoin)

stringdist_join(df1, df2, by = "Name_district", distance_col = NULL, max_dist = 3)

Выход

  Name_district.x Unmployment_rate Name_district.y Shape_polygon
1         Amatali                1          Amtali             a
2           Amtli                2          Amtali             a
3        Aamatali                3          Amtali             a
4           Bamna                4          Bamuna             b
5          Baamna                5          Bamuna             b
6        Baamuuna                6          Bamuna             b
7  Brahammanbaria                8    Bramhanbaria             c

Данные

df1 <- data.frame(
  Name_district = c("Amatali", "Amtli", "Aamatali", "Bamna", "Baamna", "Baamuuna", "B.Baria", "Brahammanbaria"),
  Unmployment_rate = 1:8
)

df2 <- data.frame(
  Name_district = c("Amtali", "Bamuna", "Bramhanbaria"),
  Shape_polygon = letters[1:3]
)
...