Saya memiliki string yang berisi nama negara dan wilayah lainnya. Saya hanya tertarik pada nama negara dan idealnya ingin menambahkan beberapa kolom, yang masing-masing berisi nama negara yang tercantum dalam string. Berikut adalah kode contoh untuk cara pengaturan kerangka data:
df <- data.frame(id = c(1,2,3),
country = c("Cote d'Ivoire Africa Developing Economies West Africa",
"South Africa United Kingdom Africa BRICS Countries",
"Myanmar Gambia Bangladesh Netherlands Africa Asia"))
Jika saya hanya membagi string berdasarkan spasi, negara-negara yang memiliki spasi akan hilang (misalnya Inggris). Lihat disini:
df2 <- separate(df, country, paste0("C",3:8), sep=" ")
Oleh karena itu, saya mencoba mencari nama negara menggunakan dataset world.cities. Namun, ini sepertinya hanya mengulang string sampai ada nama non-negara. Lihat disini:
library(maps)
library(stringr)
all_countries <- str_c(unique(world.cities$country.etc), collapse = "|")
df$c1 <- sapply(str_extract_all(df$country, all_countries), toString)
Saya bertanya-tanya apakah mungkin menggunakan spasi sebagai pembatas tetapi menentukan pengecualian (seperti Inggris Raya). Ini jelas memerlukan beberapa pekerjaan manual, tetapi tampaknya merupakan solusi yang paling layak bagi saya. Adakah yang tahu cara mendefinisikan pengecualian seperti itu? Saya tentu saja juga terbuka dan berterima kasih atas solusi lainnya.
PEMBARUAN:
Saya menemukan solusi lain menggunakan paket kode negara:
library(countrycode)
countries <- data.frame(countryname_dict)
countries$continent <- countrycode(sourcevar = countries[["country.name.en"]],
origin = "country.name.en",
destination = "continent")
africa <- countries[ which(countries$continent=='Africa'), ]
library(stringr)
pat <- paste0("\\b", paste(africa$country.name.en , collapse="\\b|\\b"), "\\b")
df$country_list <- str_extract_all(df$country, regex(pat, ignore_case = TRUE))
Cote d'Ivoire
? Apakah itu sebuah negara - person akrun   schedule 21.11.2020Cote d'Ivoire
adalah sebuah negara di Afrika. Afrika Barat tepatnya. - person Onyambu   schedule 21.11.2020