Я пытаюсь извлечь некоторые слова (названия стран) из строк. Строки являются элементами списка, например,
myList <- list(associations = c("Madeup speciesone: \r\n\t\t\t\t", "Foobarae foobar: Russia - 123,",
"Foobarus foobar France - 7007,Italy - 7007,Portugal - 6919,Ukraine - 42264,Russia - 7009,",
"Foobarus foobarbar",
"Foobaria foobariana f. sp. foobaricol Japan - 254, China - 256,"))
Я хочу извлечь название страны, и, например, я мог бы сделать это:
Country_name <- lapply(myList, pattern = "China|France|Italy|Ukraine", str_extract_all)
country_list <- vector()
for(i in 1:length(Country_name[[1]])){
country_list[i] <- paste(Country_name[[1]][[i]], collapse = ",")
}
Но для этого потребуется перечислить все возможные страны, что кажется трудоемким.
Есть ли способ использовать регулярные выражения для извлечения всех названий стран? Что-то вроде начала со второго слова с заглавной буквы, а затем извлечения всех стран до конца строки?
Использование чего-то вроде lapply(myList, word, 3)
не совсем работает из-за переменной длины названий видов (например, Foobaria foobariana f. sp. foobaricol).
# desired output
country_list <- c("","Russia","France,Italy,Portugal,Ukraine,Russia","","Japan,China")
myList
тому, что вы хотели. В исходном сообщении не было частиlist
, и я отредактировал, предположив, что это необходимо. - person nicola   schedule 10.10.2016myList
вы можете попробовать:lapply(str_extract_all(myList$associations,"(?!^)[A-Z]\\w+"),paste,collapse=",")
. - person nicola   schedule 10.10.2016\\w+
- это граница слова, правильно? а также - person nofunsally   schedule 10.10.2016\\w+
относится к любому символу слова, за исключением границ слова. Вы также можете написать это как(?<!^)[:upper:][:lower:]+
. - person Michael Griffiths   schedule 10.10.2016