2

Rから巨大なcsvファイルを読み込もうとしていますが、文字列形式であると思われる列の要素が引用符で区切られておらず、新しい行があるたびに新しい行を作成しているため、問題が発生していますライン。私のデータは ~ で区切られています。

たとえば、私のデータは次のようになります。

a ~ b ~ c ~ d ~ e
1 ~ name1 ~ This is a paragraph. 

This is a second paragraph.

~ num1 ~ num2 ~

2 ~ name2 ~ This is an new set of paragraph.

~ num1 ~ num2 ~

私はこのようなものを得たいと思っています:

| | b | c | d | え |
____________________________________________________________________________________
1 | 名前1 | これは段落です。これは 2 番目の段落です。| | 数値 1 | 数値 2 |

2 | 名前2 | これは段落の新しいセットです。| | 数値 1 | 数値 2 |

しかし、私はこのような醜いものになってしまいます:

| | b | c | d | え |
__________________________________________________________________________________
1 | 名前1 | これは段落です。| | | | | |

これは 2 番目の段落です | | | | | | | | |
                           | | 数値 1 | 数値2
2 | 名前2 | これは段落の新しいセットです。| | 数値 1 | 数値 2 |

read.csv で allowEscapes = TRUE を設定しようとしましたが、うまくいきませんでした。私の入力は現在次のようになっています。

read.csv(filename, header = T, sep = '~', stringAsFactors = F, fileEncoding = "latin1", quote = "", strip.white = TRUE)

私の次のアイデアは、各 ~ の後に引用符を挿入することですが、より良い方法があるかどうかを確認したいと考えています.

どんな助けでも大歓迎です。

4

3 に答える 3

0

これがテキスト処理の問題であることがわかったとき、私は Python の方がはるかに簡単だと判断しました。よく知らない、またはアクセスできない場合は、お詫び申し上げます。

import csv

all_rows = []
with open('tilded_csv.txt') as in_file:
    header_line = next(in_file)
    header = header_line.strip().split('~')
    current_record = []
    for line in in_file:
        # Assume that a number at the start of a line
        # signals a new record
        if line[0].isdigit():
            new_record = line.strip()
            if current_record:
                all_rows.append(current_record.split('~'))
            current_record = line.strip()
        else:
            current_record += line.strip()
# Add the last record
all_rows.append(current_record.split('~'))

with open('standard_csv.csv', 'w') as out_file:
    out_csv = csv.writer(out_file, dialect='excel')
    out_csv.writerow(header)
    for row in all_rows:
        out_csv.writerow(row)
于 2013-09-30T22:03:33.027 に答える