2016-04-13 11 views
3

私は、データ・セットがあります。私はtidyrを使用していRでtidyr :: separateと文字列を分割し、区切り文字列の値を保持するにはどうしたらいいですか?

crimes<-data.frame(x=c("Smith", "Jones"), charges=c("murder, first degree-G, manslaughter-NG", "assault-NG, larceny, second degree-G")) 

を:「G」との一致の電荷列を分割する

crimes<-separate(crimes, charges, into=c("v1","v2"), sep="G,") 

を分離これは私の列を分割しますが、削除されますセパレータ "G"結果の列分割に "G"を保持したい。

私の所望の出力は次のようになります。

x   v1      v2 
Smith  murder, first degree-G manslaughter-NG 
Jones  assault-NG    larceny, second degree-G 

任意の提案を歓迎します。

+2

希望する出力は何ですか? –

+2

'sep ="(?<= G)、 "? –

+2

データを見てみると、 'sep = '、''が実用的な選択になるようです。 – alistaire

答えて

4

UPDATE

これは、あなたが求めるものです。あなたのデータがきちんとではないことに注意してください

A<-separate(crimes,charges,into=c("V1","V2"),sep = "(?<=G,)") 
A 
     x      V1      V2 
1 Smith murder, first degree-G,   manslaughter-NG 
2 Jones    assault-NG, larceny, second degree-G 

「G」または「NG」を保つ取得する簡単な方法を使用することです(V1とV2の両方は、各列内の複数の変数を持っています) sep=", "がalistaireによって述べたように。

A<-separate(crimes, charges, into=c("v1","v2"), sep = ', ') 

これは、あなたのdata.frameを分離維持したい場合は

 x   v1    v2 
1 Smith murder-G manslaughter-NG 
2 Jones assault-NG  larceny-G 

できます(使用して - )

separate(A, v1, into = c("v3","v4"), sep = "-") 

 x  v3 v4    v2 
1 Smith murder G manslaughter-NG 
2 Jones assault NG  larceny-G 

あなたはよを与えることv2の列でもう一度やり直す必要があります。私はあなたが分離し続けるかどうか分からない、私の答えをより具体的にするために期待される出力を投稿してください。

+0

申し訳ありませんが、私の例ではデータの実際のケースは含まれていませんでした。料金。したがって、存在する "、"と区別するための抽出文字列として "G"が必要です。 – TDog

+0

そして私の望むアウトは以下の通りです。 x v1 v2 1スミス殺人-G殺し屋 - NG – TDog

+0

巨大な小道具@Matias Andina。それは素晴らしい仕事でした。今度はさらにクリーニングしてください。ご承知のとおり、私のデータはきちんと整理されていません。とにかくまだ。 – TDog

関連する問題