2016-04-19 8 views
0

私は一意のIDを使用するテーブルを持っていますが、それらのIDには一貫性のない読み込み可能な名前があります。これは、月の名前よりも複雑ですが、もっと簡単な例のために、のは、それは次のようになります言わせて:彼らは「2月」または「マーチ」8つの異なる方法で綴られている可能性があることを除いて不完全なルックアップテーブルからデータを更新するにはどうすればよいですか?

demo_frame <- read.table(text=" Month_id Month_name Number 
1 Jan 37 
2 Feb 63 
3 March 9 
3 Mar 150 
2 February 49", header=TRUE) 

を。私もバリエーションを持た名に対して一貫性のある名前が含まれているクリーンなデータフレームを持っている:

month_lookup <- read.table(text=" Month_id Month_name 
2 Feb 
3 Mar", header=TRUE) 

私がこれまで取得したい:

1 Jan 37 
2 Feb 63 
3 Mar 9 
3 Mar 150 
2 Feb 49" 

は私がmerge(month_lookup, demo_frame, by = "Month_id")を試みたが、それはすべて1月の値を落としたので、 「01月」ルックアップテーブルに存在しません:

Month_id Month_name.x Month_name.y Number 
1  2   Feb   Feb  63 
2  2   Feb  February  49 
3  3   Mar  March  9 
4  3   Mar   Mar 150 

How to replace data.frame column names with string in corresponding lookup table in Rの私の読み取りは、私がplyr::mapvaluesを使用できるようにするべきだということですが、私は叔父です私がidnameにどのようにマッピングするかについての例とドキュメントから。私は「3月」と「3月」を「3月」に置き換えて言うだけではありません。検索の各値についてSET month_name = 'Mar' WHERE month_id = 3と言う必要があります。

+0

なぜ2つのテーブルをまとめてマージするだけではないのですか? – bramtayl

+0

申し訳ありません。 'merge'がどこに失敗したかを含んでいたはずです。一定。 – Amanda

+0

ルックアップテーブルにJanを追加するだけですか?ルックアップテーブルは 'data.frame(month.abb = month.abb、Month_id = 1:12)'で簡単に生成できます。 – bramtayl

答えて

0

あなたはこれが欲しいと思います。

library(dplyr) 

demo_frame <- read.table(text=" Month_id Month_name Number 
1 Jan 37 
2 Feb 63 
3 March 9 
3 Mar 150 
2 February 49", header=TRUE, stringsAsFactors = FALSE) 

month_lookup <- read.table(text=" Month_id Month_name 
2 Feb 
3 Mar", header=TRUE, stringsAsFactors = FALSE) 

result = 
    demo_frame %>% 
    rename(bad_month = Month_name) %>% 
    left_join(month_lookup) %>% 
    mutate(month_fix = 
      Month_name %>% 
      is.na %>% 
      ifelse(bad_month, Month_name)) 
関連する問題