2017-10-06 9 views
1

R:別の文字ベクトルとのマッチ文字ベクトル

は3列、「タイトル」、「都市」と「状態」(再現性)とデータフレーム「USA」を考えてみて、このタスクの周りに私の心をラップすることはできません:

この中で結果として得られる
title <- c("Events in Chicago, September", "California hotels", 
       "Los Angeles, August", "Restaurant in Chicago") 
    city <- c("","", "Los Angeles", "Chicago") 
    state <- c("","", "California", "IL") 

    usa <-data.frame(title, city, state) 

       title  city  state 
    1 Events in Chicago, September      
    2   California hotels      
    3   Los Angeles, August Los Angeles California 
    4  Restaurant in Chicago  Chicago   IL 

は、今私がやろうとしています何今欠けている最初の2つの観測用の状態変数を埋めるためです。

TITLE変数にはヒントが含まれています。都市または州が各エントリに記載されています。私は次の操作を行う必要がある

:「タイトル」欄のいずれかの単語は、「都市」と「状態」列で見つかった観察と一致した場合に

  1. チェックを。
  2. "title"の単語が "state"のいずれかの観察と一致する場合は、指定したタイトルの観測と同じ状態を貼り付けます。
  3. "title"の単語が "city"のいずれかの観測と一致する場合は、一致した都市の状態をタイトル行の "state"列に貼り付けます。言い換えれば

           title  city  state 
        1 Events in Chicago, September      IL 
        2   California hotels    California   
        3   Los Angeles, August Los Angeles California 
        4  Restaurant in Chicago  Chicago   IL 
    

    、タイトルがとてもマッチ状態が状態ベクトルから発見された単語「カリフォルニア」を、含まれている2行目:

だから私は最終的に取得したいことは、このです。しかし、最初の行では「シカゴ」という単語がキーであり、シカゴを「IL」状態にリンクしたデータフレーム(行4)に別のエントリがあったため、「IL」を最初の行に貼り付ける必要があります「状態」列の行。

コミュニティのアイデアを待っています:)ありがとう!

答えて

0

stringrパッケージを使用することをお勧めします。具体的には、str_extractと呼ばれる機能を有する。

都市の完全なリストがある場合は、例: city <- c("Los Angeles", "Chicago")を入力すれば、paste(city, collapse = '|'を使って正規表現にすることができます)。それはあなたに与えるでしょう:'Los Angeles|Chicago'str_extractで、その都市を抽出することができます(最初のものが抽出され、抽出されない場合はNA)。ここに完全なコードがあります。 注:

# A tibble: 4 x 3 
         title  city  state 
         <chr>  <chr>  <chr> 
1 Events in Chicago, September  Chicago  <NA> 
2   California hotels  <NA> California 
3   Los Angeles, August Los Angeles California 
4  Restaurant in Chicago  Chicago   IL 
:あなたのデータフレームはDATA_FRAME(tibble)、ないdata.frame
(理由は全くわからない、それに見ていない)

library(tidyverse) 
library(stringr) 

title <- c("Events in Chicago, September", "California hotels", 
      "Los Angeles, August", "Restaurant in Chicago") 
city <- c("","", "Los Angeles", "Chicago") 
state <- c("","", "California", "IL") 

usa <-data_frame(title, city, state) # notice this is a data_frame not data.frame 

cities <- paste(c("Los Angeles", "Chicago"), collapse = '|') 
states <- paste(c("California", "IL"), collapse = '|') 

usa <- usa %>% 
    mutate(city = ifelse(city == '', str_extract(title, cities), city), 
     state = ifelse(state == '', str_extract(title, states), state)) 

である場合、これは、その結果、この唯一の作品

+0

見ていただきありがとうございます!しかし、私は各ラインの状態値が必要です、それはトリックです。そしてライン1では州のためにNAを持っています – Denis

+0

それは簡単な修正です。すべての都市をその州にマップするリストが必要です。 –

+0

もう一度おねがいします:)簡単な質問 - 上記のデータは、より大きなデータフレームの一部です。変換に必要なデータをサブセット化する必要がありますか?提案するすべての手順を実行し、データを初期データフレームに貼り付けますか? – Denis

関連する問題