Как использовать NLP/манипулирование строками для перекодирования нескольких столбцов штата/города/зарубежных местоположений

ОЧЕНЬ благодарна за помощь!!!

У меня есть очень грязные данные, которые я пытаюсь очистить. Ищете элегантное решение в R, которое будет правильно определять, есть ли зарубежные поездки или нет (ИСТИНА = зарубежные поездки, ЛОЖЬ = внутренние поездки/поездки в США).

Есть несколько проблем с данными, в том числе: - штаты представлены как в сокращенном, так и в не сокращенном формате - опечатки - разные форматы (например, просто штат, город с запятой, город с косой чертой и т. д.) - данные в разделе штат/страна могут содержать город, а не штат/страна и наоборот для столбца города.

В столбце «Поездки за границу» решение должно быть перезаписано таким образом, чтобы, если в столбце «штат/страна» или «город» были указаны поездки за границу, оно было бы закодировано как ИСТИНА, в противном случае — ЛОЖЬ.

   `State/Country`          `Foreign Travel`                   City         
    <chr>                            <lgl>                    <chr>        
   1 CA                                FALSE             San Francisco
   2 California                        FALSE             San Francisco
   3 British Columbia, Canada          TRUE              Vancouver    
   4 Florida                            NA               Hollywood    
   5 TX                                 NA               Dallas       
   6 Florda                             NA               Orlando 
   7 FL/CA                              NA               Orlando, Sacramennto 
   8 bufalo                             NA               NY
   9 d.c                               FALSE             washington dc
   10 frt wort, tx                     FALSE             texass
   11 frt wort, tx                     FALSE             texass
   12 japan                            NA                japan
   13 W?rzburg                         FALSE             german

Прямо сейчас у меня есть какой-то очень неаккуратный код, который просматривает каждый столбец, выдает true/false, если находит его, если true (найден внутренний элемент), по крайней мере, для 1 столбца, он перекодирует иностранный столбец t/f в False (нет иностранного путешествовать):

 ##add some lines for nas
 no_entry <- c("na",".","","n/a","none")
  ##Maps package
 cities<- world.cities

 USAcities <- cities %>%
    filter(country.etc == 'USA')

   USAcities <- c(USAcities, 'williamsburg')

  USAcities <-tolower(USAcities$name)
 USA_fullState<- tolower(USA_fullState)
 USA_stateABR<- tolower(USA_stateABR)
 Travel_df_limited$State.Country<- tolower(Travel_df_limited$State.Country)


     Travel_df_limited$ForeignTravel_rc1 <- 
    c(rep(0,length(Travel_df_limited$Foreign.Travel)))

   i<-1
   for (i in 1:length(USA_fullState)){
   Travel_df_limited <- Travel_df_limited %>%
    mutate(ForeignTravel_rc1 = 
    ifelse(grepl(USA_fullState[i],Travel_df_limited$State.Country) == 
    "TRUE","FALSE",Travel_df_limited$ForeignTravel_rc1 ))
     i<- i+1}

  Travel_df_limited$ForeignTravel_rc1

   Travel_df_limited <- Travel_df_limited %>%
    mutate(ForeignTravel_rc2 = ifelse(Travel_df_limited$State.Country%in% 
    USA_stateABR== "TRUE","FALSE","TRUE"))


 Travel_df_limited$ForeignTravel_rc3 <- 
    c(rep(0,length(Travel_df_limited$Foreign.Travel)))

   i<-1
 for (i in 1:length(USAcities)){
   Travel_df_limited <- Travel_df_limited %>%
    mutate(ForeignTravel_rc3 = 
     ifelse(grepl(USAcities[i],Travel_df_limited$State.Country) == 
    "TRUE","FALSE",Travel_df_limited$ForeignTravel_rc3))
     i<- i+1}


     Travel_df_limited <- Travel_df_limited %>%
     mutate(ForeignTravel_rc = ifelse(Travel_df_limited$ForeignTravel_rc1 == 
      "FALSE" |   Travel_df_limited$ForeignTravel_rc2 == "FALSE"|
                                 Travel_df_limited$ForeignTravel_rc3 == 
          "FALSE" , "FALSE",
             ifelse(Travel_df_limited$State.Country%in% 
               c("na",".","","n/a","none") =="TRUE","FALSE", "TRUE")))



      Travel_df_limited<- subset(Travel_df_limited, select = - 
       c(ForeignTravel_rc1,ForeignTravel_rc2,ForeignTravel_rc3))

person Ellie    schedule 25.09.2019    source источник
comment
stackoverflow.com/questions/3515235 /   -  person cory    schedule 25.09.2019
comment
Попробуйте запросить API карт Google со строкой и посмотреть, какую страну он возвращает? Я не думаю, что это хорошо подходит для stackoverflow, поскольку на самом деле это не проблема программирования, а скорее эвристическая очистка данных.   -  person Benjamin Schwetz    schedule 25.09.2019
comment
Вот распространенные орфографические ошибки для городов США... offices.net/misspelled-city-names.htm   -  person cory    schedule 25.09.2019