2011-12-07 18 views
5

非常に長い電話ログをテキストファイルとして取得しましたが、これをRに読み込もうとしましたが、実際にはうまくいきません。テキストは構造を持っていますが、テーブルではありません。 readLinesが データがテーブルにないときにRにテキストファイルを読み込む方法

  • 非常に適切ではないように、その構造は

    1. を、以下の通りである各レコードが複数行から構​​成されている各レコードの各行には、いくつかのレコードが第2のフィールドの後に追加のフィールドを持っている別のフィールド
    2. ある
    3. 新しいレコードはそれぞれ、空白行で示されます。

      :1のレコードが区切られたことを指定し、「\ N \ N」とフィールド(または列)はここで、「\ n」は

    で区切られたことが一例であることができた場合readLinesまたはscanが働いているだろう

    TheInstitute 5467 
        telephone line 4125526987 x 4567 
        datetime 2011110516 12:56 
        blay blay blah who knows what, but anyway it may have a comma 
    
    TheInstitute 5467 
        telephone line 4125526987 x 4567 
        datetime 2011110516 12:58 
        blay blay blah who knows what 
    
    TheInstitute 5467 
        telephone line 412552999 x 4999 
        bump phone line 4125527777 
        datetime 2011110516 12:59 
        blay blay blah who knows what 
    
    TheInstitute 5467 
        telephone line 4125526987 x 4567 
        bump phone line 4125527777 
        datetime 2011110516 13:51 
        blay blay blah who knows what, but anyway it may have a comma 
    
    TheInstitute 5467 
        telephone line 4125526987 x 4567 
        datetime 2011110516 14:56 
        blay blay blah who knows what 
    

    Rでこれを行うにはどうすればよいですか?私はスキャン、ペースト、strsplitでトリックを試みたが、私はサークルで回転している。私はそれがリストの中になければならないかもしれません。私はすべてのレコードが同じ数のフィールドを持ち、1つのフィールドを持たないレコード(ここではバンプ・フォン)に対して、そのフィールドの値としてNAを持たせたいと思います。私はちょうど始めるために助けていただければ幸いです。そこから私は遊んでおもちゃをすることができます。

  • 答えて

    14

    scan関数のmulti.line = TRUEの場合、レコードは2行の終わりで終わる必要があります。私はあなたのファイルの周りtextConnectionのでこれをやっていますが、有効なファイル名を使用します:非常に良い

    inp <- scan(textConnection(txt), multi.line=TRUE, 
          what=list(place="character", tline1="character", 
          cline1="character", cline2 ="character", cline3="character"), sep="\n") 
    Read 5 records 
    > str(as.data.frame(inp)) 
    'data.frame': 5 obs. of 5 variables: 
    $ place : Factor w/ 1 level "TheInstitute 5467": 1 1 1 1 1 
    $ tline1: Factor w/ 2 levels " telephone line 4125526987 x 4567",..: 1 1 2 1 1 
    $ cline1: Factor w/ 4 levels " bump phone line 4125527777",..: 2 3 1 1 4 
    $ cline2: Factor w/ 4 levels " blay blay blah who knows what",..: 2 1 3 4 1 
    $ cline3: Factor w/ 3 levels ""," blay blay blah who knows what",..: 1 1 2 3 1 
    > as.data.frame(inp) 
           place        tline1 
    1 TheInstitute 5467 telephone line 4125526987 x 4567 
    2 TheInstitute 5467 telephone line 4125526987 x 4567 
    3 TheInstitute 5467 telephone line 412552999 x 4999 
    4 TheInstitute 5467 telephone line 4125526987 x 4567 
    5 TheInstitute 5467 telephone line 4125526987 x 4567 
             cline1 
    1 datetime 2011110516 12:56 
    2 datetime 2011110516 12:58 
    3 bump phone line 4125527777 
    4 bump phone line 4125527777 
    5 datetime 2011110516 14:56 
                      cline2 
    1 blay blay blah who knows what, but anyway it may have a comma 
    2         blay blay blah who knows what 
    3          datetime 2011110516 12:59 
    4          datetime 2011110516 13:51 
    5         blay blay blah who knows what 
                      cline3 
    1                 
    2                 
    3         blay blay blah who knows what 
    4 blay blay blah who knows what, but anyway it may have a comma 
    5                 
    
    +0

    +1を... – Andrie

    +0

    ...しかし、私はあなたがさらに分割 'place'、' tline'する必要が推測します'cline1'をサブ列に追加しますか? – Tommy

    +0

    次のタスクは 'datetime'と 'bump lines'データの周りを移動することだと思いますが、質問者がコメントを解析するように求めているとは思われませんでした。 –

    関連する問題