6

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

以下はデータファイルの例です。潜在的な問題の 1 つは、データの 1 行に複数のコロンが含まれていることです。その行は、ある時点でヘッダーになる可能性があります。したがって、すべてのコロンで分割するのではなく、最初のコロンで分割する必要があります。

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: 文字列から最後の 3 つのドットを削除する

上記の最初のリンクのコードは、最初の行の最初のコロンでのみ分割されているようです。2 番目のリンクのコードは、おそらく私がやりたいことを実行しますが、複雑すぎて今のところうまく変更できません。

取得したいデータは次のとおりです。この時点で、非常に単純なgsubステートメントを使用して、最初の行の残りのコロンを空のスペースに置き換えることができます。

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

これが私が見つけられなかった投稿の重複である場合は申し訳ありません。アドバイスや支援に感謝します.

4

1 に答える 1

15

以下は、文字列の先頭から開始し、最初のコロンと追加のスペースまでのすべてを取得し、それを何も置き換えません (基本的には削除するだけです)。

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

スペースを削除したくない場合は、次のことができます

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

元の正規表現が何をしているのかを明確にするため。最初から:

^これは、文字列の先頭でのみ一致を見つけることを示しています

[^:]これは、コロン以外の任意の文字を表します

+これは、前の文字に 1 回以上一致することを示します (したがって、できるだけ多くの非コロン文字に一致します)。

:これは実際にコロンに一致するものです

\\sこれはスペースに一致します

*これは、前の文字に 0 回以上一致することを示します (したがって、コロンの後の追加のスペースはすべて削除されます)。

したがって、すべてをまとめると、文字列の先頭から始めて、できるだけ多くの非コロン文字に一致し、最初のコロン文字と追加のスペースを取得して、それらすべてを何も置き換えません (本質的に不要なジャンクをすべて削除します)。したくない)。

于 2012-09-02T05:19:17.407 に答える