Извлекать текст в соответствии с разделителями, но пропустить пропущенные записи - PullRequest
2 голосов
/ 03 мая 2019

У меня есть такой текст:

 inputString<- “Patient Name:MRS Comfor Atest Date of Birth:23/02/1981 Hospital Number:000000 Date of Procedure:01/01/2010 Endoscopist:Dr. Sebastian Zeki: Nurses:Anthony Nurse , Medications:Medication A 50 mcg, Another drug 2.5 mg Instrument:D111 Extent of Exam:second part of duodenum Visualization:Good Tolerance:  Good Complications:  None Co-morbidity:None INDICATIONS FOR EXAMINATION Illness Stomach pain. PROCEDURE PERFORMED Gastroscopy (OGD) FINDINGS Things found and biopsied  DIAGNOSIS Biopsy of various RECOMMENDATIONS Chase for histology. FOLLOW UP Return Home"

Я хочу извлечь части теста в их собственные столбцы в соответствии с некоторыми текстовыми границами, которые я установил:

  myWords<-c("Patient Name","Date of Birth","Hospital Number","Date of Procedure","Endoscopist","Second Endoscopist","Trainee","Referring Physician","Nurses"."Medications")

Не все слова-разделители есть в тексте (но они всегда в одном и том же порядке).

У меня есть функция, которая должна отделять их (с заголовком столбца в качестве начала границы слова:

delim<-myWords
inputStringdf <- data.frame(inputString,stringsAsFactors = FALSE)

  inputStringdf <- inputStringdf %>%
    tidyr::separate(inputString, into = c("added_name",delim),
                    sep = paste(delim, collapse = "|"),
                    extra = "drop", fill = "right")

Однако, если между двумя разделителями не найдено или если разделители не существуют, вместо того, чтобы поместить NA в столбец, он просто заполняет его следующим текстом, найденным между двумя разделителями. Как я могу убедиться, что правильные столбцы заполнены правильным текстом, определенным разделителями?

1 Ответ

1 голос
/ 03 мая 2019

Используя вход, показанный в примечании в конце, преобразуйте его в формат DCF и затем прочитайте его, используя read.dcf, который преобразует строки ввода в матрицу символов m. Смотрите ?read.dcf для получения дополнительной информации. Пакеты не используются.

pat <- sprintf("(%s)", paste(myWords, collapse = "|"))
g <- gsub(pat, "\n\\1", paste0(Lines, "\n"))
m <- read.dcf(textConnection(g))

Вот первые три столбца:

m[, 1:3]
##      Patient Name       Date of Birth Hospital Number
## [1,] "MRS Comfor Atest" "23/02/1981"  "000000"       
## [2,] "MRS Comfor Atest" NA            "000000"    

Примечание

Предполагается, что вход имеет одну запись на пациента, как в этом примере, в котором есть две записи. Мы только что повторили первого пациента для простоты синтеза набора входных данных, за исключением того, что мы опустили дату рождения во второй записи.

Lines <- c(inputString, sub("Date of Birth:23/02/1981 ", "", inputString))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...