Я пытаюсь прочитать большую таблицу в R, но одно из текстовых полей иногда содержит один или несколько символов новой строки без кавычек и без экранирования (\n
), поэтому функция read.table()
не может легко импортировать этот файл. Файл разделен вертикальной чертой, а текстовые поля не заключены в кавычки.
Я могу прочитать его, если передам аргумент fill=T
с read.table()
, но, конечно, строки с символами новой строки в текстовом поле будут повреждены этим.
Я успешно смог использовать f <- readChar(fname, nchars=file.info(fname)["size"], TRUE)
для чтения подсегментов файла, а затем использовать gsub()
для поиска и уничтожения оскорбительных символов новой строки. (см. код ниже) Однако размер полного файла > 100 МБ, поэтому gsub()
делает немного больше, чем превращает мой ноутбук в грелку для рук (он все еще пытается использовать gsub для всех символов новой строки, когда я пишу это).
У кого-нибудь есть какие-либо предложения о том, как эффективно читать в таком файле?
Кажется, что должен быть какой-то способ сказать R ожидать определенное количество разделителей, прежде чем ожидать новой строки, но я не смог найти способ сделать это в документации.
Извините, кажется, что это должно быть легко, но это действительно поставило меня в тупик, и я не смог найти ничего в stackoverflow или Google, предлагающих решение.
Вот код, который я пробовал до сих пор:
попытка 1:
fdat = read.table(file=fname,
allowEscapes=F,
stringsAsFactors=F,
quote="",
fill=T,
strip.white=T,
comment.char="",
header=T,
sep="|")
попытка 2:
f <- readChar(fname, nchars=file.info(fname)["size"], TRUE)
f2 = gsub(pattern="\n(?!NCT)",replacement=" ",x=f, perl=T)
fdat = read.table(text=f2,
allowEscapes=F,
stringsAsFactors=F,
quote="",
fill=F,
strip.white=T,
comment.char="",
header=T,
sep="|")
Вот несколько строк из файла:
NCT_ID|DOWNLOAD_DATE|DOWNLOAD_DATE_DT|ORG_STUDY_ID|BRIEF_TITLE|OFFICIAL_TITLE|ACRONYM|SOURCE|HAS_DMC|OVERALL_STATUS|START_DATE|COMPLETION_DATE|COMPLETION_DATE_TYPE|PRIMARY_COMPLETION_DATE|PRIMARY_COMPLETION_DATE_TYPE|PHASE|STUDY_TYPE|STUDY_DESIGN|NUMBER_OF_ARMS|NUMBER_OF_GROUPS|ENROLLMENT_TYPE|ENROLLMENT|BIOSPEC_RETENTION|BIOSPEC_DESCR|GENDER|MINIMUM_AGE|MAXIMUM_AGE|HEALTHY_VOLUNTEERS|SAMPLING_METHOD|STUDY_POP|VERIFICATION_DATE|LASTCHANGED_DATE|FIRSTRECEIVED_DATE|IS_SECTION_801|IS_FDA_REGULATED|WHY_STOPPED|HAS_EXPANDED_ACCESS|FIRSTRECEIVED_RESULTS_DATE|URL|TARGET_DURATION|STUDY_RANK
NCT00000105|Information obtained from ClinicalTrials.gov on September 25, 2012|9/25/2012|2002LS032|Vaccination With Tetanus and KLH to Assess Immune Responses.|Vaccination With Tetanus Toxoid and Keyhole Limpet Hemocyanin (KLH) to Assess Antigen-Specific Immune Responses||Masonic Cancer Center, University of Minnesota|Yes|Terminated|July 2002|March 2012|Actual|March 2012|Actual|N/A|Observational|Observational Model: Case Control, Time Perspective: Prospective||3|Actual|112|Samples With DNA|analysis of blood samples before and 4 weeks postvaccination|Both|18 Years|N/A|Accepts Healthy Volunteers|Probability Sample|- Normal volunteers
- Patients with Cancer (breast, melanoma, hematologic)
- Transplant patients (umbilical cord blood transplant, autologous transplant)
- Patients receiving other cancer vaccines|March 2012|March 26, 2012|November 3, 1999|Yes|Yes|Replaced by another study.|No||http://clinicaltrials.gov/show/NCT00000105||6670
NCT00000106|Information obtained from ClinicalTrials.gov on September 25, 2012|9/25/2012|NCRR-M01RR03186-9943|41.8 Degree Centigrade Whole Body Hyperthermia for the Treatment of Rheumatoid Diseases|||National Center for Research Resources (NCRR)||Active, not recruiting||||||N/A|Interventional|Allocation: Randomized, Intervention Model: Parallel Assignment, Primary Purpose: Treatment|||||||Both|18 Years|65 Years|No|||November 2000|June 23, 2005|January 18, 2000||||No||http://clinicaltrials.gov/show/NCT00000106||7998
Как видно, эти образцы строк из моего проблемного файла включают заголовок (строка № 1), проблемную строку (строка № 2) и непроблемную строку (строка № 3). Каждая строка без заголовка начинается с NCT и заканчивается на \n (это было использовано в регулярном выражении gsub).
Любые предложения очень ценятся.