2012-09-02 14 views
6

readLinesを使用してテキスト形式のデータファイルを読み込んでいます。最初の「列」は私が必要としない複雑なテキストです。次の列には、必要なデータが含まれています。最初の「列」とデータはコロン(:)で区切られています。最初のコロンで各行を分割し、結果のテキスト文字列を削除し、データのみを残したいとします。最初のコロンの分割文字列

以下は、データファイルの例です。 1つの潜在的な複雑さは、1行のデータに複数のコロンが含まれていることです。その行はいつか私のヘッダーになるかもしれません。だから、私はたぶん最初のコロンで、すべてのコロンで分割してはいけません。

Split on first comma in string

とここに:私はここに提示したコードしようとしている

my.data <- "first string of text..: aa : bb : cc 
      next string ........ : 2 0 2 
      third string......1990: 7 6 5 
      last string   : 4 2 3" 

my.data2 <- readLines(textConnection(my.data)) 
my.data2 

上記の最初のリンクで

R: removing the last three dots from a string

コードのみの最初のコロンで分割しているようです最初の行2番目のリンクのコードはおそらく私が望むことをするでしょうが、これまでのところそれをうまく修正するには複雑すぎます。

aa : bb : cc 
    2 0 2 
    7 6 5 
    4 2 3 

申し訳ありませんが、これは重複している場合:ここでは

は、私は単に非常に単純なgsub文を使用して空のスペースで最初の行の残りのコロンを置き換えることができ、その時点で私は取得したいと考えていたデータ、あります私が見つけたことのない投稿のあなたのアドバイスや援助に感謝します。

答えて

15

gsub("^[^:]+:\\s*", "", my.data2) 

(基本的にそれを取り除く)、文字列の先頭から開始し、最初のコロンと任意の追加のスペースまでを含むすべてのものをつかむと、何もそれを交換すれば、以下の通りで、あなたの場合ドン「tはあなたがオリジナルの正規表現が何をしているかについて、いくつかの明確化のために

gsub("^[^:]+:", "", my.data2) 

を行うことができ、スペースを削除します。初めに開始:

^をこれだけ、これはコロンこれは、1つまたは直前の文字に一致するように言う

+ではない任意の文字を表し

[^:]文字列の先頭に一致するものを見つけるに言いますより多くの時間が、これは実際にコロンと一致するものです

:(そう、できるだけ多くの非コロン文字に一致する)

\\sこれはスペースこれが0回以上は

(ので、我々は、コロンの後に追加のスペースを削除)直前の文字に一致するように言う

*と一致すると、だから我々は、文字列の先頭から開始すべて一緒にそれを置きますできるだけ多くの非コロン文字をマッチさせて、最初のコロン文字と追加のスペースをつかみ、そのすべてを何も置き換えないようにします(基本的には不要なすべての迷惑メールを削除します)。

+0

回答と優れた説明をありがとうございます。 –

+5

+1の説明 –