2016-10-10 5 views
0

Я пытаюсь извлечь некоторые слова (названия стран) из строк. Струны список элементов, например,stringr текст извлечения на основе захвата и позиции

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") 
+1

Пожалуйста, смотрите, если объект 'myList' является то, что вы хотели. В исходном посте не было части «list», и я редактировал, полагая, что это было необходимо. – nicola

+1

С редактированием 'myList' вы можете попробовать:' lapply (str_extract_all (myList $ association, "(?! ^) [A-Z] \\ w +"), paste, collapse = ",") '. – nicola

+0

@nicola myList edit - это то, что я намеревался. Ваш код работает. '\\ w +' является границей слов, правильно? и – nofunsally

ответ

0

Вы можете извлечь названия стран с использованием пакета countrycode

library(countrycode) 
countries <- as.data.frame(countrycode_data$country.name) 

Если вы хотите придерживаться своего кода, вы можете создать строку, состоящую из всех названий стран, разделенных «|»

all <- paste(countrycode_data$country.name, collapse="|") 

Затем работает

Country_name <- lapply(myList, pattern = all, str_extract_all) 

country_list <- vector() 
for(i in 1:length(Country_name[[1]])){ 
country_list[i] <- paste(Country_name[[1]][[i]], collapse = ",") 
} 

должно дать вам результат:

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,", 
          "Germany", 
          "555Senegal")) 

Country_name <- lapply(myList, pattern = all, str_extract_all) 

country_list <- vector() 

for(i in 1:length(Country_name[[1]])){ 
country_list[i] <- paste(Country_name[[1]][[i]], collapse = ",") 
} 

country_list 
[1] ""   ""    "France,Italy,Portugal,Ukraine" 
[4] ""   "Japan,China"  "Germany"      
[7] "Senegal" 

 Смежные вопросы

  • Нет связанных вопросов^_^