2016-05-11 8 views
1

大きなデータを扱っています。カラム値をgrepで置き換えたいと思います。ここでカラム値をgrepで置き換えます。R

は簡単な例である:「データ」と呼ばれるデータで

data=data.frame(state=c("AlAbama","Alaaska","Arizoona"), 
        gender=c("male","female","female")) 
datalist=data.frame(state=c("Alabama","Alaska","Arizona")) 

、私は間違った方法で記述された状態の名前を持っていると私はデータリスト内の書き込みの名前でそれらを交換したいと思います。 grepを使って、 "data"の列の値を "datalist"の列の値に置き換えたいと思います。

data[grep(data[,"state"],datalist[,"state"])] 

そして、この:

私はこれを試してみました

for (u in datalist$state){ 
data[grep(u,datalist$state)] 
} 

をしかし、それは動作しません。

この問題を解決する方法はありますか?

敬具、 Mily

+0

'stringdist'パッケージがあなたの唯一の希望です! https://cran.r-project.org/web/packages/stringdist/stringdist.pdf –

+0

ありがとう!あなたは私に例を与えることができますか? – Mily

答えて

0

クイック試しに回答してください。

library(stringdist) 

data1 <- data.frame(
    state = c("AlAbama", "Alaaska", "Arizoona", "NY"), 
    gender = c("male", "female", "female", "unkn") 
) 
datalist <- data.frame(state = c("Arizona", "Alabama", "Alaska")) 

dist_m <- data.frame(stringdistmatrix(data1$state, datalist$state)) 

dist_m$minID <- apply(dist_m, 1, which.min) 

data1$state2 <- datalist$state[dist_m$minID] 

そして結果:もちろん

 state gender state2 
1 AlAbama male Alabama 
2 Alaaska female Alaska 
3 Arizoona female Arizona 
4  NY unkn Alaska 

あなたはこれに注意する必要がありますが、アドホックソリューションとして問題ないはずです。

また、stringdist機能のパラメータについては、methodweightをお読みください。

+0

ありがとう:)良い一日を。 – Mily

+0

あなたも!期待どおりに動いたら教えてください。完全な状態名とその略語を含むルックアップを使用し、次に第2ステップとして略語をフルネームに変更することをお勧めします。 –

0

あり、これを解決するために、複数の方法があるが、それはあなたがやりたいのクリーニングの種類に応じて、時間を消費することがあります。

まず、grepは文字セットを置き換えます。したがって、あなたがパターンを起こしている場合、それは問題ありません。たとえば、すべての "a"が2倍になっている場合は、grepを使用して "aa"を "a"に置き換えることができます。

不適切な方法で入力された状態数が限られている場合は、誤った値を正しい値に関連付けて手動でルックアップテーブルを作成し、単にマージすることができます。または、間違った方法で入力された各状態に対して、grepステップを実行しますが、それは長くなります。

クリーニングするパターンの数が多い場合は、open refineを使用できます。これには、半手動クラスタ機能があり、さまざまなメトリックが実装されているため、簡単に状態をクラスタ化できます。

関連する問題