2017-03-02 4 views
1

私の問題に対する直感的な解決策を探していました。 私はいくつかの基準に基づいて特殊文字を挿入する必要がある単語の巨大なリストを持っています。 2/3文字の単語がセルに表示された場合 は、だから私はhow +to+ finance commercial +ale+ estate既存の単語に基づいてRに特殊文字を挿入します

に変換します global +b2b+ banking

how to finance commercial ale estateに変換します

global b2b bankingを「+」、右を追加し、それを左にしたいですここ

は、サンプルデータセットである:

sample <- c("commercial funding", 
"global b2b banking" 
"how to finance commercial ale estate" 
"opening a commercial account", 
"international currency account", 
"miami imports banking", 
"hsbc supply chain financing", 
"international business expansion", 
"grow business in Us banking", 
"commercial trade Asia Pacific", 
"business line of credits hsbc", 
"Britain commercial banking", 
"fx settlement hsbc", 
"W Hotels") 
data <- data.frame(sample) 

さらに、長さ1の文字を持つ行を削除することは可能ですか? 例:私はGSUBでそれらを削除しようとしたすべての1つの文字の単語については

W Hotels 

gsub(" *\\b[[:alpha:]]{1,1}\\b *", " ", sample) 

これは、設定されたデータセットから削除する必要があります。

ご協力いただきまして誠にありがとうございます。

編集1助けを

おかげで、私はそれにいくつかのより多くの行を追加しました:

sample <- c("commercial funding", "global b2b banking", "how to finance commercial ale estate", "opening a commercial account","international currency account","miami imports banking","hsbc supply chain financing","international business expansion","grow business in Us banking", "commercial trade Asia Pacific","business line of credits hsbc","Britain commercial banking","fx settlement hsbc", "W Hotels") 
sample <- sample[!grepl("\\b[[:alpha:]]\\b",sample)] 
sample <- gsub("\\b([[:alpha:][:digit:]]{2,3})\\b", "+\\1+", sample) 
sample <- gsub(" ",",",sample) 
sample <- gsub("+,","+",sample) 
sample <- gsub(",+","+",sample) 
sample <- tolower(sample) 
sample <- ifelse(substr(sample, 1, 1) == "+", sub("^.", "", sample), sample) 
data <- data.frame(sample) 
data 




              sample 
1        commercial++funding 
2       global+++b2b+++banking 
3 how++++to+++finance++commercial+++ale+++estate 
4    international++currency++account 
5       miami++imports++banking 
6     hsbc++supply++chain++financing 
7    international++business++expansion 
8    grow++business+++in++++us+++banking 
9    commercial++trade++asia++pacific 
10   business++line+++of+++credits++hsbc 
11     britain++commercial++banking 
12       fx+++settlement++hsbc 

はどういうわけか、私は削除することができません "+"、 "" でGSUBと?私は間違って何をしていますか? だから"fx+,settlement,hsbc""fx+settlement,hsbc"でなければなりませんが、++と置き換えられます。

+0

を使用し、文字列の先頭からすべて+を削除する必要がある場合

はまた、あなたが唯一の文字からなる単語全体を含むすべてのアイテムをドロップしたいわけ? –

+0

もし複数の単語を持っていても1つの単語の長さが1であれば、その行を削除したいと思います。残りの2文字と3文字の前後に特殊文字 "+"を追加します。 。 – PSraj

+1

よかった、だから何を試しましたか? –

答えて

2

2ステップで行う必要があります:1文字の単語で項目を削除してから、+を2〜3文字の単語に追加します。

使用

sample <- c("commercial funding", "global b2b banking", "how to finance commercial ale estate", "opening a commercial account","international currency account","miami imports banking","hsbc supply chain financing","international business expansion","grow business in Us banking", "commercial trade Asia Pacific","business line of credits hsbc","Britain commercial banking","fx settlement hsbc", "W Hotels") 
sample <- sample[!grepl("\\b[[:alnum:]]\\b",sample)] 
sample <- gsub("\\b([[:alnum:]]{2,3})\\b", "+\\1+", sample) 
data <- data.frame(sample) 
data 

R demo

sample[!grepl("\\b[[:alnum:]]\\b",sample)]はワード境界(\b)、手紙([[:alnum:]])、ワード境界パターンが含まれている項目を削除を参照してください。

gsub("\\b([[:alnum:]]{2,3})\\b", "+\\1+", sample)行はすべて2〜3文字の全単語を、+で囲まれたこれらの単語で置き換えます。

結果:W Hotelsopening a commercial accountが除外しまったこと

         sample 
1       commercial funding 
2      global +b2b+ banking 
3 +how+ +to+ finance commercial +ale+ estate 
4    international currency account 
5      miami imports banking 
6     hsbc supply chain financing 
7   international business expansion 
8    grow business +in+ +Us+ banking 
9    commercial trade Asia Pacific 
10   business line +of+ credits hsbc 
11     Britain commercial banking 
12      +fx+ settlement hsbc 

注意。

sample <- gsub(" ",",",sample, fixed=TRUE) 
sample <- gsub("+,","+",sample, fixed=TRUE) 
sample <- gsub(",+","+",sample, fixed=TRUE) 
:EDIT

回答あなたはコードにいくつかのより多くの交換作業を追加しましたが、あなたはリテラル文字列の置換を使用している、したがって、あなただけfixed=TRUE引数を渡す必要があります

それ以外の場合、+は正規表現の量子として扱われ、リテラルプラスシンボルとして扱われるためにエスケープされなければなりません。あなたがそう

sample <- sub("^\\++", "", sample) 
+1

'b2b'が' + b2b + 'になる場合、パターンにインクルード' [:digit:] 'を含める必要があります。 – coletl

+0

すべての '[[:alpha:]]'(単なる文字)を '[[:alnum:]]'(文字+数字)に置き換えました。 OPがフィルタリングのために何を使うべきか、そして '+'ラッピングのために何を使うのかを決定してください。 –

+0

あなたのソリューションはすごくうまくいっていますが、私はまだ頑張っています。私はgsub +には参加できません。 – PSraj

関連する問題