2016-05-04 6 views
1

私は5要素を含む文字ベクトルを持っています。 4つの要素には1つの名前が含まれますが、1つの要素には2つの名前が含まれ、カンマで区切ります。例えば文字ベクトル内の要素を分割し、それを新しい要素として挿入する方法は?

は:確かに

string 

[1] "Eric" "John" "Dora" "Michael" "James" "Susan" 

、これは非常に簡単なはず:

string <- c("Eric", "John", "Dora", "Michael, James", "Susan") 

string 
[1] "Eric"   "John"   "Dora"   "Michael, James" "Susan" 

私はそのようなことを、二つの別々の要素に4番目の要素を分離します。しかし、私はそれを理解するように見えることはできません。

私は

strsplit(string, ",") 

を使用すると、結果がリストです。

このリストをdata.frameに変換してそれらの列をスタックする方法があると思いますが、この問題の正規表現の魔法またはsubstringコードがあるのでしょうか?

+1

'strsplit'で' unlist'を使用してください。 – Gopala

+1

ので '非公開に(strsplit(文字列、「」))'また、 『\\ sの+』 '余分なスペースを使用してのあなたのケースで、彼らは同じように保持されないように' 'として'上の分割を考慮することができる – Sotos

+1

スプリット。 – Gopala

答えて

2

strsplitで正しいパスにいる場合、ベクターを取得するにはunlistを使用してください。

> unlist(strsplit(string, ",")) 
[1] "Eric" "John" "Dora" "Michael" " James" "Susan" 
+2

アンサーは既に上記のコメントに含まれていました。 – Gopala

+0

スプリット値として "James"の前にスペースを入れずにこの結果を得たかどうかは分かりません。私は '' James "' –

+2

@RichardScrivenが正しいです。あなたはちょうどあなたの出力をより良く見えるように修正しましたか?これは 'unlist(strsplit(string、" \\ s *、\\ s * "))'のようなものでなければなりません。そして、それはdownvotesに終わるので、書かれた答えを改善しようとするコメントを無視しない方が良いです。 –

3

また、すべて一緒にリストの結果を避けるためにscan()を使用することができます。

scan(text = string, what = "", sep = ",", strip.white = TRUE) 
# Read 6 items 
# [1] "Eric" "John" "Dora" "Michael" "James" "Susan" 
+0

'scan'関数は、実際のデータを計算するのに非常に時間がかかります。なぜそうなのか知っていますか?ちょっと興味があるんだけど。 –

+0

@wake_wake - あなたの実際のデータはどれくらい大きいですか? –

+0

約330万のユニークな名前:-) –

関連する問題