2017-02-01 9 views
0

私は形式で汚れた大量のデータを持っている:R - GSUBを使用して置き換える文字列()

abc 
abc/def 
abc/de 
abc/d 
abc/def/i j k 
abc/def/i 
abc/def/i j 

これは私が変更したいデータのほんの一部です。これははるかに大きなデータセットの一部です。

すべての要素をabc/def/i j kに変更したいと思います。次のように Iはgsub()関数を使用した:

gsub('abc[a-z/]', 'abc/def/i j k', str) 

出力

abc/def/i j k 
abc/def/i j k/def 
abc/def/i j k/de 
abc/def/i j k/d 

問題は、それがパターンの発生を置き換えることです。私はまともな十分な結果を得た

唯一の解決策はどこでハードコードこのようなすべての可能なオプションがされています。新しいデータにばらつきがある場合

gsub('abc$|abc/d$|abc/de$|abc/def/i$', 'abc/def/i j k', str) 

しかし、これは動作しないでしょう。 私は、パラメータをハードコーディングせずに結果を得ることが可能かどうか疑問に思っていました。

+0

以外0+文字をしている 'abc' /' def'プレースホルダ?さもなければ、 '^ abc [a-z /] * $'は 'sub'でも使えます。 –

+1

正しく理解すれば、すべての要素を "abc/def"にしたいので、 'rep(" abc/def "、length(str))'を使うのはなぜですか? –

+0

'sub("(abc)[/ az] * "、" \\ 1/def "、x)'または 'sub(" ^(abc)[/ az] * $ "、" \\ 1/def "、x)' –

答えて

2

あなたはR demo

詳細を参照してください

x <- c("abc", "abc/def","abc/de","abc/d","abc/def/i j k","abc/def/i","abc/def/i j") 
sub("^(abc)(?:/[^/]*)?", "\\1/def", x) 
## => [1] "abc/def"  "abc/def"  "abc/def"  "abc/def"  
## [5] "abc/def/i j k" "abc/def/i"  "abc/def/i j" 

使用することができます:

  • ^ - 文字列の先頭
  • (abc) - グループ1:abc
  • -
  • (?:/[^/]*)?オプションのグループは、一連のマッチング: - /
  • [^/]* -
    • /、だから/
+1

もう一度確認しました。出来た。ありがとう。 –

関連する問題