2017-08-24 5 views
2

置き換える:stringrパッケージは、私はstringrパッケージを使用して、次のルールで文字列内の各文字を置換しようとしています文字

replace_characters <- function(x){str_replace_all(x,c("A"="N",'B'='O','C'='P','D'='Q','E'='R','F'='S','G'='T','H'='U','I'='V','J'='W','K'='X','L'='Y','M'='Z', 
'N'='A','O'='B','P'='C','Q'='D','R'='E','S'='F','T'='G','U'='H','V'='I','W'='J','X'='K','Y'='L','Z'='M','0'='5','1'='6','2'='7','3'='8','4'='9','5'='0','6'='1','7'='2','8'='3','9'='4'))} 

をして、私は、ランダムな文字列で機能を試してみました:

replace_characters("HSNKSL584") 

と私は得た:

"HFAKFL034" 

あなたがいくつかの文字(数字)が期待どおりに置き換えられているのを見ることができますが、変更されません。 誰も私の理由を説明できますか?

ありがとうございます!

+1

'' '' stringr :: str_replace_all ( "H"、c( "H" = "U"、 "U" = "H")) '' ''は '' '' '' '' ''にも何もしません。 。 – raymkchow

+2

それは期待されていませんか?あなたは 'A = B'、' B = A' ? – Sotos

答えて

0

我々はbase R

chartr("HSNKL584", "UFAXY039", "HSNKSL584") 
#[1] "UFAXFY039" 

からchartrでこれを行うことができますこれはstringistri_replace_all_*機能時にstringr::str_replace_all呼び出しは、舞台裏

replace_char_fun <- function(str1) { 
    old <- paste(c(LETTERS, 0:9), collapse="") 
    new <- paste(c(LETTERS[14:26], LETTERS[1:13], 5:9, 0:4), collapse="") 
    chartr(old, new, str1) 
} 
replace_char_fun("HSNKSL584") 
#[1] "UFAXFY039" 
3

機能にすることができます。複数の置換パターンを指定するために名前付きベクトルを使用した場合(この場合)、stri_replace_all_*に入力された対応するパラメータにはvectorize_all = FALSEが含まれます。

stri_replace_all_*のヘルプファイルから:

vectorize_allがFALSEである場合は、stri_replace_allの*のために、提供されたパターンのいずれかにマッチ各 ストリングは 対応する置換文字列に置き換えられます。そのような場合、ベクトル化はstrの上で であり、 - 独立して - パターンと置換の上です。他の の言葉では、これは、(i 1:npatterns)のためのようなものと同等であるSTR < - stri_replace_all(STR、パターン[i]は、交換[i]は... &ソトスが持っているraymkchowとして

コメントに記されているように、置換パターンを1つずつ順番に循環させると、あるものが複数回影響を受けて、前のサイクルから置換えを効果的に取り消すことになります。

関連する問題