ฉันมีสตริงที่มีชื่อประเทศและภูมิภาคอื่นๆ ฉันสนใจเฉพาะชื่อประเทศ และต้องการเพิ่มหลายคอลัมน์ โดยแต่ละคอลัมน์มีชื่อประเทศที่แสดงอยู่ในสตริง นี่คือโค้ดตัวอย่างสำหรับวิธีการตั้งค่า dataframe lis:
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"))
ถ้าฉันแยกสตริงตามช่องว่าง ประเทศเหล่านั้นที่มีช่องว่างจะหายไป (เช่น สหราชอาณาจักร) ดูที่นี่:
df2 <- separate(df, country, paste0("C",3:8), sep=" ")
ดังนั้นฉันจึงพยายามค้นหาชื่อประเทศโดยใช้ชุดข้อมูล world.citys อย่างไรก็ตาม ดูเหมือนว่าจะวนซ้ำผ่านสตริงจนกว่าจะไม่มีชื่อประเทศ ดูที่นี่:
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)
ฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะใช้ช่องว่างเป็นตัวคั่น แต่กำหนดข้อยกเว้น (เช่นสหราชอาณาจักร) เห็นได้ชัดว่าอาจต้องอาศัยการทำงานด้วยตนเอง แต่ดูเหมือนจะเป็นวิธีแก้ปัญหาที่เป็นไปได้มากที่สุดสำหรับฉัน ไม่มีใครรู้วิธีกำหนดข้อยกเว้นดังกล่าวหรือไม่ แน่นอนว่าฉันยังเปิดกว้างและขอบคุณสำหรับวิธีแก้ปัญหาอื่น ๆ
อัปเดต:
ฉันพบวิธีแก้ปัญหาอื่นโดยใช้แพ็คเกจรหัสประเทศ:
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
ล่ะ? มันเป็นประเทศ. - person akrun   schedule 21.11.2020Cote d'Ivoire
เป็นประเทศในแอฟริกา แอฟริกาตะวันตกให้ชัดเจน - person Onyambu   schedule 21.11.2020