2016-07-21 5 views
0

私は一貫している必要がある病院ワードデータを持っています。最初の数字は階数、続くアルファベット文字はワード頭字語、最後の2文字はベッド番号です。Rの文字列 - 選択されたアルファベット文字と数字の間のスペースを挿入します。

ので2EA 28は28

場所は、私は、次のしていることを、このような矛盾した空間で入力されている床面2、区東とベッドのようになります。私はそれをしたいと思い

toyraw<-data.table(incident_no = c(1:6), location =c("2EA17","2EA 17", "1ED1", "1ED23", "1ED 34","ICU24")) 

何の前で数値私はちょうど時の数字と文字の1からサブだろうが、それが数値であるので、文字がなかった場合は、次の

toyideal<-data.table(incident_no = c(1:5), location =c("2EA 17","2EA 17", "1ED 1", "1ED 23", "1ED 34", "ICU 24")) 

のように見えます数値では問題が発生しています。 1462行あります。

さらに複雑で、ICUなどの地上階区には先行番号がありません。要求ごととして

を追加しました - 人間が読める名前

人間が読める名前:

additional<-data.table(incident_no = c(1:5), location =c("2EA 17","2EA 17", "1ED 1", "1ED 23", "1ED 34"), 
        human_Readable = c("Ward 2 East Bed 17","Ward 2 East Bed 17", "Ward 1 Emergency Department 
             Bed 1", "Ward 1 Emergency Department Bed 23", "Ward 1 Emergency Department Bed 24", 
             "Ward ICU Bed 24")) 
+1

両方のコードが同じ値を与える。 – user2100721

+0

頭字語を人間が読める名前にマッピングするための表を教えてください。 –

答えて

1

あなたはこのためにgsub()を使用することができます。ここでは

> gsub("(\\d*)(\\D*)\\s*(\\d*)", 
     "Floor \\1 Ward \\2 and Bed \\3.", 
     gsub(" ", "", "1ED 34")) 

[1] "Floor 1 Ward ED and Bed 34." 

は、私が使用した正規表現です:

(\\d*)(\\D*)\\s*(\\d*) 

Regex101

+0

これは、病院病棟の命名プロトコルが一貫している場合に有効です。病院の病棟名自体が完全に一貫しておらず、一部の病棟に頭字語の頭字語があるため、いくつかの問題を引き起こしています。理想的には、最後の数値の右に空白が1つあることを確認する必要があります。したがって、ICU24はICU 24になります。基本的に一貫性が必要で、dplyrを使用してカウントを実行できます。 – monkeyshines

+0

正規表現を更新して、 'ICU24 'でも動作するようにしました。つまり、先行する数字がない場合です。 Regexは固定構造に適しています。実際に名前の規則がない場合、正規表現は最適なツールではないかもしれません。 –

+1

「outliers」のすべてがうまく機能するのは1階です。正規表現を明確に構造化された表現に制限することを保証します。 – monkeyshines

関連する問題