2016-07-27 9 views
1

私はcsvファイルを書き出すプログラムを持っていますが、改行を引用したり、/n/rの代わりに/nを使用したりしていません。終わりと同じように、レコードの途中で同じ行末を使用します。ただし、プログラムは変数間にカンマ区切り文字を使用します。 Rに、データの変数の数に達するまで、すべてのeolマーカーを削除するように指示するにはどうすればよいですか?Rにcsvファイルの破線を結ぶ方法はありますか?

私のデータは次のようになります。

name, rank, serial number, age, height, weight 

mike, noob, 123456, 22, 6, 34.4 

bob, officer, 345 

323, 24, 6, 2 

3.5 

ted, officer, 34234, 2 

5, 6, 35.2 

は、どのように私は基本的に3行で、行6で2後2後、行2の5の後にCRを削除しますか?各行に5つのカンマと6つの変数が必要です。私のデータには、各行の間に余分な行がありません。私はそれをやっていない限り、すべてを1行に入れるのを止めることができませんでした。私のデータは43の変数で、常に新しい行を生成しています。ほとんどの場合、数千の行が読み込まれます。約20%がCR問題を抱えています。

また、新しい行が常に新しい行で開始されることを追加したい場合は、新しい行が常に前の行と同じ行に続くことになります。

データフレームは次のようになります。

name, rank, serial number, age, height, weight 

mike, noob, 123456, 22, 6, 34.4 

bob, officer, 345323, 24, 6, 23.5 

ted, officer, 34234, 25, 6, 35.2 

これは、それが助け場合、私のデータがどのように見えるかです。最初の行は、ヘッダーの後に6レコードでなければなりませんが、read.csvfreadがあります。 6番目のレコードには余分なCRがありますが、まだ42の変数があります。ちょうど5行に分かれています。

EFPCName,EFUseAPPE,log pdl,pdl error,device pretty name,num pages,num sheets,copies printed,total pages printed,total sheets printed,total color pages printed,total bw pages printed,total tab pages printed,total sample pages printed,num copies,print status,instructions,notes1,notes2,username,noneutf8lastuser,non utf8 submitted by,title,size,logical printer,fiery,time,date,total rip duration,timestamp spooling,timestamp done spooling,timestamp waiting to rip,timestamp ripping,timestamp done ripping,timestamp waiting to print,timestamp printing,timestamp done printing,media weight,input slot,media size,media type,interpreter, 

LZX Laser 24 - 11 x 17 Tabloid,,postscript,,Canon,2,1,1,2,1,1,1,0,0,1,OK,,,,TeamMember,,TeamMember,78053.01.pdf,4004491,Canon hold,SERVER-Shredder,2013 06 07 19 37 13,2013 06 07 19 37 00,3,2013 06 07 19 37 23,2013 06 07 19 37 24,2013 06 07 19 38 02 118342,2013 06 07 19 38 02 118342,2013 06 07 19 38 09,2013 06 07 19 38 09,2013 06 07 19 38 38,2013 06 07 19 39 19 124419,,Tray5,Tabloid,Plain,PS, 

LZX Laser 24 - 11 x 17 Tabloid,,postscript,,Canon,2,1,1,2,1,1,1,0,0,1,OK,,,,TeamMember,,TeamMember,78053.01.pdf,4004520,none,SERVER-Shredder,2013 06 07 19 37 13,2013 06 07 19 37 00,,2013 06 07 19 44 07 926090,2013 06 07 19 44 07 926744,2013 06 07 19 44 07 926090,2013 06 07 19 44 07 926090,2013 06 07 19 44 07 926744,2013 06 07 19 44 07,2013 06 07 19 44 11,2013 06 07 19 44 53 141084,,Tray5,Tabloid,Plain,PS, 

LZX Laser 24 - 11 x 17 Tabloid,,postscript,,Canon,2,1,1,2,1,1,1,0,0,1,OK,,,,TeamMember,,TeamMember,78053.01.pdf,4004520,none,SERVER-Shredder,2013 06 07 19 37 13,2013 06 07 19 37 00,,2013 06 07 19 46 01 550964,2013 06 07 19 46 01 551451,2013 06 07 19 46 01 550964,2013 06 07 19 46 01 550964,2013 06 07 19 46 01 551451,2013 06 07 19 46 01,2013 06 07 19 46 05,2013 06 07 19 46 46 911557,,Tray5,Tabloid,Plain,PS, 

LZX80 Color Copy Cover - 11 x 17 Tabloid,,postscript,,Canon,1,2,2,2,2,2,0,0,0,2,OK,,,,TeamMember,,TeamMember,78011.01.pdf,874486,Canon hold,SERVER-Shredder,2013 06 07 19 47 07,2013 06 07 19 47 00,3,2013 06 07 19 47 17,2013 06 07 19 47 17 507576,2013 06 07 19 47 47 960542,2013 06 07 19 47 47 960542,2013 06 07 19 47 51,2013 06 07 19 47 51,2013 06 07 19 47 54,2013 06 07 19 48 25 77595,,Tray3,Tabloid,Heavy5,PS, 

LZX Laser 24 - 11 x 17 Tabloid,,postscript,,Canon,2,1,1,2,1,1,1,0,0,1,OK,,,,TeamMember,,TeamMember,78053.01.pdf,4004520,none,SERVER-Shredder,2013 06 07 19 37 13,2013 06 07 19 37 00,,2013 06 07 19 48 04 501212,2013 06 07 19 48 04 502522,2013 06 07 19 48 04 501212,2013 06 07 19 48 04 501212,2013 06 07 19 48 04 502522,2013 06 07 19 48 04,2013 06 07 19 48 07,2013 06 07 19 48 48 188474,,Tray5,Tabloid,Plain,PS, 

EX32 Laser 32 - 11 x 17 Tabloid,,pdf,,Canon,63,64,1,63,64,4,59,0,0,1,OK,Size: 11 x 17 
Finishing: Coil Binding Cutting Punching 
Pages: 
1-63 4/0 EX32 Laser 32 - 11 x 17 11 x 17 
,Color 77992:01Employee Handbook REVISED_2up(NFC).pdf, McAllen TX,EFI Pace,,,Color 77992:01Employee Handbook REVISED_2up(NFC).pdf,518880,none,SERVER-Shredder,2013 06 07 20 01 52,2013 06 07 20 01 00,3,2013 06 07 20 02 41 495216,2013 06 07 20 02 44 780196,2013 06 07 20 02 41 871208,2013 06 07 20 02 41 871208,2013 06 07 20 02 45,2013 06 07 20 02 45,2013 06 07 20 03 25,2013 06 07 20 05 45 741386,,Tray4,Tabloid,Heavy1,PS, 

答えて

1

これは私が今持っているものです。あなたのデータでこれがどのように機能するかをご覧ください。

dat <- readLines("temp.txt") # read whatever is in there, one line at a time 
varnames <- unlist(strsplit(dat[1], ",")) # extract variable names 
nvar <- length(varnames) 

k <- 1 # setting up a counter 
dat1 <- matrix(NA, ncol = nvar, dimnames = list(NULL, varnames)) 

while(k <= length(dat)){ 
    k <- k + 1 
    if(dat[k] == "") {k <- k + 1 
     print(paste("data line", k, "is an empty string")) 
     if(k > length(dat)) {break} 
    } 
    temp <- dat[k] 
    # checks if there are enough commas or if the line was broken 
    while(length(gregexpr(",", temp)[[1]]) < nvar-1){ 
     k <- k + 1 
     temp <- paste0(temp, dat[k]) 
    } 
    temp <- unlist(strsplit(temp, ",")) 
    message(k) 
    dat1 <- rbind(dat1, temp) 
} 

dat1 = dat1[-1,] # delete the empty initial row  

一般的な考え方は、文字列に十分なカンマがあるまで、折りたたみテキストを維持することです。これが達成されると、データはカンマで分割され、1つの行としてマトリックスに追加されます。コードはひどく鈍いので、大きなデータファイルでは遅くなります。私ができることは最高です。

元のデータ例では、コードは動作し、42列6行の文字行列を作成します。より小さな例では、コードは最後の列でブレークを処理できません。

+0

このエラーが発生しました:if(dat [k] == ""){:欠損値TRUE/FALSEが必要な場合 さらに:50以上の警告がありました(警告()を使用して最初の50 )。これはまた読み込まれ、光るアプリで表示されます。ユーザーが介入する方法はありません。それは本当に何か問題があった場合、ラインを投げることは可能ですか?私はまだそれを見たことがありますが、それは私が推測することができる可能性があります。 –

+0

このエラーは、k> length(dat)の場合に発生します。 – nya

+0

@MichaelCiesielczyk dat1テーブルに実際のデータで正しく識別された行がいくつか作成されましたか? – nya

1

長さが違う行を暗黙的に追加する場合は、read.table呼び出しでfill = TRUEと設定します。

あなたが求めている質問ではない場合は、より明確になり、再現可能な例を提供できますか?

+0

はい、レコードの末尾に空白を、後ろに空白を挿入したくありません。データフレームが私の質問の編集のように見えるようにする必要があります。 –

+0

空白はデータに意味がありますか、それともすべて削除できますか?つまりスペースが必要ですか? – nya

+0

はい変数の中に空白が必要です。 –

関連する問題