2017-11-29 7 views
0

私は、すべての観測値が複数のものを記述するID値を持つデータセットを持っています。たとえばAE1はサイトA、タイプE、観測1を示します。上記の例では、他のデータを削除しながらEをフィルタリングしようとしています。大きな文字列から部分文字列を取得するR

私はgsubを使用してみましたが、新しいタイプのパターンはすべて前のパターンを上書きしているようです。

library(gsubfn) 

x <- c("AE1", "AE2", "AD1", "AD2", "BE1", "BE2", "BD1", "BD2") 
y <- gsubfn(".", list("E" = "easy", "D" = "difficult"), x) 

y 

[1] "Aeasy1"  "Aeasy2"  "Adifficult1" "Adifficult2" "Beasy1"  "Beasy2"  "Bdifficult1" "Bdifficult2" 

結果との問題は、私はまだ最初の文字と最後の番号を削除する必要があるということです。下図のように私に最も近いを取得するように見えるアプローチはgsubfnを使用しています。実際には、「E」と「D」の4つのタイプのカテゴリがあります。

ありがとうございます。

+0

@ d.bとして、私の削除された答えでコメントしました。中間文字を抽出するために 'substr(x、2、2)'を使うことができます。それでは、例えば 'factor'や' match'や 'merge'や...を使って変換する方法はあなた次第です。 –

+0

お互いに感謝します。どちらのアプローチも非常にうまく機能します。 – Csim063

答えて

0

1)gsubfnコードは実際には既に非常に近いです。 "."の代わりに".(.)."を正規表現として使用します。これは3文字に一致し、リストの中で処理されます。 3文字のマッチ全体が処理の結果に置き換えられます。

library(gsubfn) 

gsubfn(".(.).", list("E" = "easy", "D" = "difficult"), x) 
## [1] "easy"  "easy"  "difficult" "difficult" "easy"  "easy"  
## [7] "difficult" "difficult" 

2)strapplystrapply同じパッケージでも動作します。他の*apply関数と同様に、最初にオブジェクトを処理し、修飾子(この場合は正規表現)、最後にリスト(または関数またはprotoオブジェクト)を処理します。結果を入力文字列に代入するのではなく、gsubfnとは異なり、処理の結果を返します。

strapply(x, ".(.).", list("E" = "easy", "D" = "difficult"), simplify = TRUE) 
## [1] "easy"  "easy"  "difficult" "difficult" "easy"  "easy"  
## [7] "difficult" "difficult" 
関連する問題