2016-10-10 6 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'オブジェクトはあなたが意図したものであるかどうかを確認:

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 = ",") } 

を実行すると、あなたに結果を与える必要があります。元の投稿には「リスト」の部分はなく、必要であれば編集しました。 – nicola

+1

'myList'を編集したら、' lapply(myList $ associations、 "(?!^)[A-Z] \\ w +")、paste、collapse = "、") 'を試すことができます。 – nicola

+0

@nicola myListの編集は私が意図したものです。あなたのコードは動作します。 '\\ w +'は単語の境界ですか? – nofunsally

答えて

0

あなたのコードに固執する場合は、あなたが区切られているすべての国の名前からなる文字列を作成することができ、パッケージcountrycode

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

を使用して国の名前を抽出することができます「|」 、

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" 
関連する問題