Извлечение названий стран в R - PullRequest
0 голосов
/ 13 апреля 2020

У меня довольно плохо отформатированный список мест. Мне нужно извлечь названия городов и стран для каждой записи. Я не уверен, как поступить.

Список выглядит так:

c("Groningen", "Netherlands, Groningen", "Netherlands", "Jerusalem, Israel",
 "Nesher, Israel" "Western, United States", "U.S.", "United States",
 "Sacramento, California, USA")

Спасибо, TK

1 Ответ

1 голос
/ 13 апреля 2020

В идеале вы должны попытаться выяснить, есть ли какой-нибудь пакет, который позволяет искать на картах Google.

Если их нет, я бы начал с разделения данных, сопоставления названий стран с пакетом кода страны и перехода оттуда.

library("countrycode")
library("data.table")

d <- data.table(raw = c("Groningen", "Netherlands, Groningen", "Netherlands", "Jerusalem, Israel",
  "Nesher, Israel", "Western, United States", "U.S.", "United States","Sacramento, California, USA"))

d <- cbind(
  d,
  d[, tstrsplit(raw, ",", fixed=TRUE) ]
)

d[, country := countrycode( V1, "country.name", "country.name")]
d[!is.na(country), city := V2]
d[is.na(country), city := V1]
d[is.na(country), country := countrycode( V2, "country.name", "country.name")]

                           raw            V1             V2   V3       country       city
1:                   Groningen     Groningen           <NA> <NA>          <NA>  Groningen
2:      Netherlands, Groningen   Netherlands      Groningen <NA>   Netherlands  Groningen
3:                 Netherlands   Netherlands           <NA> <NA>   Netherlands       <NA>
4:           Jerusalem, Israel     Jerusalem         Israel <NA>        Israel  Jerusalem
5:              Nesher, Israel        Nesher         Israel <NA>        Israel     Nesher
6:      Western, United States       Western  United States <NA> United States    Western
7:                        U.S.          U.S.           <NA> <NA> United States       <NA>
8:               United States United States           <NA> <NA> United States       <NA>
9: Sacramento, California, USA    Sacramento     California  USA          <NA> Sacramento
...