R: сопоставьте первые три символа для каждого значения в столбце со списком, замените его значением из списка - PullRequest
0 голосов
/ 02 апреля 2020

Следующие данные являются частью моего набора данных

data$country <- "República Dominicana", "Mexico", "México", "Uruguay", "Haiti", "El salvador", "MÉXICO", "Panamà", "Mexxico", "México, Chile, Colombia.", "Haiïti", "Argentina", "Costa Rica", "Colombia/Argentina/Uruguay", "www.unac.edu.co"

Я создал список уникальных стран, например:

countrynames <- c("Argentina", "Bolivia", "Colombia", "Costa Rica", "Dominican Republic", "Ecuador", "El Salvador", "Guatemala", "Haiti", "Honduras", "Mexico", "Nicaragua", "Panama", "Peru", "Uruguay")

Я определил, что этого достаточно, чтобы соответствовать первые три символа для подавляющего большинства случаев в списке названий стран. Теперь я хочу запустить его так, чтобы, если первые три символа совпадали, он заменял значения ячейки на значение названия страны. Впрочем, я не могу этого понять. У кого-нибудь есть хороший способ сделать это? Я даже не знаю, как начать подходить к нему, и я потратил некоторое время на поиск различных решений, которые, кажется, охватывают только случаи, когда вы хотите сопоставить целые слова с другими значениями в списках.

ОБНОВЛЕНИЕ

Я закончил тем, что сделал это так: не супер эффективно, но он сделал свою работу:

  data$Country <- data %>%
  mutate(
    v1 = tolower(prac$Country),
    Country = case_when(
      startsWith(v1, "arg") ~ "Argentina",
      startsWith(v1, "bol") ~ "Bolivia",
      startsWith(v1, "col") | startsWith(v1, "www") ~ "Colombia",
      startsWith(v1, "cos") ~ "Costa Rica",
      startsWith(v1, "rep") ~ "Dominican Republic",
      startsWith(v1, "ecu") ~ "Ecuador",
      startsWith(v1, "el s") ~ "El Salvador",
      startsWith(v1, "gua") ~ "Guatemala",
      startsWith(v1, "hai") ~ "Haiti",
      startsWith(v1, "hon") ~ "Honduars",
      startsWith(v1, "mex") | startsWith(v1, "méx") ~ "Mexico",
      startsWith(v1, "nic") ~ "Nicaragua",
      startsWith(v1, "pan") ~ "Panama",
      startsWith(v1, "per") ~ "Peru",
      startsWith(v1, "uru") ~ "Urugay",
      TRUE ~ as.character(prac$Country))) 

Основываясь на этом много от этого ответа

1 Ответ

0 голосов
/ 02 апреля 2020

Пусть

A = c("Brazil", "France", "Belgium") 
B = c("Belgien", "Brasilien", "Frankreich") 
X = data.frame(A, Short = substr(A, start = 1, stop = 3)) 
Y = data.frame(B, Short = substr(B, start = 1, stop = 3)) 

Тогда мы можем использовать внутреннее соединение, чтобы соединить их в соответствии с первыми тремя буквами.

Result = inner_join(X, Y) 

> Result
    A       Short      B
 1  Brazil   Bra  Brasilien
 2  France   Fra Frankreich
 3 Belgium   Bel    Belgien

Это то, что вы хотели?

...