У меня есть кадр данных, который содержит столбец беспорядочных строк. Каждая беспорядочная строка включает имя одной страны где-то в ней. Вот версия игрушка:От строки до регулярного выражения до новой строки
df <- data.frame(string = c("Russia is cool (2015) ",
"I like - China",
"Stuff happens in North Korea"),
stringsAsFactors = FALSE)
Благодаря countrycode
пакет, у меня также есть второй набор данных, который включает в себя два полезных столбца: один с regexs для названий стран (regex
), а другой с именем ассоциированной страны (country.name
) , Мы можем загрузить этот набор данных, как это:
library(countrycode)
data(countrycode_data)
Я хотел бы написать код, который использует регулярные выражения в countrycode_data$regex
, чтобы определить название страны, в каждой строке df$string
; ассоциирует это регулярное выражение с соответствующим именем страны в countrycode_data$country.name
; и, наконец, записывает это имя в соответствующую позицию в новом столбце, df$country
. После выполнения этой операции ТПО, df
будет выглядеть следующим образом:
string country
1 Russia is cool (2015) Russian Federation
2 I like - China China
3 Stuff happens in North Korea Korea, Democratic People's Republic of
Я не могу достаточно обернуть вокруг головы, как это сделать. Я попытался использовать различные комбинации grepl
, which
, tolower
и %in%
, но я получаю неправильное направление или размеры (или оба).
Я не вижу в 'regex' столбец в' кадра данных countrycode_data' ... EDIT, фигу, я Думаю, я нашел его, называемый 'country.name.en.regex'? – rosscova
Соответствующий столбец в 'countrycode_data' должен просто называться' regex'. Соответствующий столбец с собственными именами - 'country.name'. – ulfelder
возможно что-то подобное может помочь: http://stackoverflow.com/questions/21165256/r-merge-data-frames-allow-inexact-id-matching-eg-with-additional-characters – Bulat