Подавление запятой внутри двойных кавычек при чтении файла CSV в файл .Xdf Использование функции rxImport

Я пытаюсь преобразовать большой файл .CSV в файл .Xdf, используя функцию rxImport() с приведенным ниже кодом:

rxImport(inData = "/poc/revor/data/ext_roll36_chrg_vol.csv",
         outFile = "/poc/revor/data/ext_roll36_chrg_vol.xdf", 
         overwrite = TRUE, rowsPerRead = 100000,
         colClasses = c(SE_NO = "character", 
                        HIER_ROLLUP_CD = "character", 
                        CUR_MO_CT ="numeric", 
                        CUR_MO_AM = "numeric", 
                        AD_LINE_1_TX = "character",
                        AD_LINE_2_TX = "character",
                        SUBMIT_DT = "character", 
                        UPDT_TS = "character"),
         transforms = list(SUBMIT_DT = as.Date(SUBMIT_DT, format="%d%b%Y")))

Но этот файл содержит много записей, таких как:

0200001097,SS,625,236899.000,"KRAV MAGA WORLDWIDE, INC.","KRAV MAGA WORLDWIDE, INC.",01MAY2014,07JUN2014:01:08:57.000000

Как видите, столбцы AD_LINE_1_TX и AD_LINE_2_TX содержат запятые внутри двойных кавычек.

Я пытался использовать аргумент type = "text", но затем он считывает первый столбец, т.е. SE_NO, как numeric, хотя его тип отображается как character. Это проблема со всеми полями numeric, которые я хочу читать как character.

И если я преобразую столбец, используя аргумент transform, в character как:

transforms = list(SE_NO = as.character(as.numeric(SE_NO)))

Затем значение столбца SE_NO изменяется с 0200001097 на 0200001000 при преобразовании символьного (экспоненциального представления) 2.000011e+08 в числовое.

Итак, есть ли другой способ подавить запятую внутри двойных кавычек, не затрагивая другие столбцы?

Пожалуйста, дайте мне знать, если потребуется какая-либо дополнительная информация о том же.


person Amit Mishra    schedule 27.06.2015    source источник
comment
Есть ли у этого CSV строка заголовка?   -  person Derek McCrae Norton    schedule 09.07.2015


Ответы (1)


Это должно дать вам то, что вам нужно...

input_file <- "/poc/revor/data/ext_roll36_chrg_vol.csv"
output_file <- "/poc/revor/data/ext_roll36_chrg_vol.xdf"

my_colInfo <- list(list(index = 1, type = "character", newName = "SE_NO"),
                   list(index = 2, type = "character", newName = "HIER_ROLLUP_CD"),
                   list(index = 3, type = "numeric", newName = "CUR_MO_CT"),
                   list(index = 4, type = "numeric", newName = "CUR_MO_AM"),
                   list(index = 5, type = "character", newName = "AD_LINE_1_TX"),
                   list(index = 6, type = "character", newName = "AD_LINE_2_TX"),
                   list(index = 7, type = "character", newName = "SUBMIT_DT"),
                   list(index = 8, type = "character", newName = "UPDT_TS"))

input_source <- RxTextData(file = input_file, 
                           colInfo = my_colInfo,
                           delimiter = ",",
                           quotedDelimiters = TRUE,
                           useFastRead = TRUE)

rxImport(inData = input_source,
         outFile = output_file, 
         overwrite = TRUE, rowsPerRead = 100000,
         transforms = list(SUBMIT_DT = as.Date(SUBMIT_DT, format="%d%b%Y")))
person Derek McCrae Norton    schedule 09.07.2015
comment
Большое спасибо за решение, оно подавляет кавычки, однако снова показывает ошибку: Ошибка в rxCall (Rx_ImportDataSource, params): может быть из-за того, что значение столбца AD_LINE_1_TX имеет значение как KIMBEL PLUMBING, INC. т.е. имеет три кавычки до и после значения. Итак, есть ли способ удалить лишние кавычки, полностью присутствующие в этом столбце? - person Amit Mishra; 13.07.2015