Используйте текстовый фрейм данных в качестве входных данных для read_delim - PullRequest
0 голосов
/ 11 апреля 2020

Я читаю данные из многих грязных PDF-файлов. Конечным результатом для каждого файла PDF является R-кадр данных с одной переменной, которую я называю text. Каждая строка кадра данных содержит текстовое представление одной строки исходной таблицы PDF. Элементы в каждой строке разделены знаком '|' персонаж. Один из них выглядит следующим образом: -

Общее количество подтвержденных случаев | 965
nd
Количество новых случаев 22 марта | 129
Общее количество госпитализированных | 277 | 28,7
Общее количество поступивших в отделения интенсивной терапии | 36 | 3.7
Общее количество смертей | 6
Коэффициент летальности (CFR) | 0.6
Общее количество вспышек или кластеров | 44
Общее количество случаев, связанных с кластеры | 243 | 25,2 Общее количество импортированных случаев | 201 | 20,8
Количество случаев в медработнике | 247 | 25,6
Средний возраст (годы) | 45
Возрастной диапазон (годы) | 0-95

и его можно воссоздать из этого: -

structure(list(Text = c("Total number of confirmed cases|965", 
"nd", "Number of new cases 22 March|129", "Total number hospitalised|277|28.7", 
"Total number admitted to ICU|36|3.7", "Total number of deaths|6", 
"Case Fatality Ratio (CFR )|0.6", "Total number of outbreaks or clusters|44", 
"Total number cases associated with clusters|243|25.2", "Total number of imported cases|201|20.8", 
"Number of cases in HCW|247|25.6", "Median age (years)|45", "Age range (years)|0-95"
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-13L))

В данный момент я записываю это с помощью write_csv () и читаю обратно с помощью read_delim () вот так: -

write_csv(HPSC,'data/temp.csv')

HPSC <- read_delim('data/temp.csv', delim='|',
                 skip=1, na = c('-'),
                 col_names = c('Characteristic','Number','Pct')) %>%
mutate(Date = dmy('08.04.2020')) # In the real version, the date comes from elsewhere.

Сложно, но не очень сложно собрать многие из них вместе и получить мой конечный результат - по сути, информационный кадр с одной строкой в ​​pdf.

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

Есть ли способ сделать это?

1 Ответ

1 голос
/ 11 апреля 2020

Ваша интуиция верна - вы можете передать свой столбец в read_delim, не сохраняя его сначала как CSV, но вам нужно передать его как вектор, а не как таблицу. Используя вашу структуру данных, я полагаю, что я создал ваши запрошенные функции здесь:

x = structure(list(Text = c("Total number of confirmed cases|965", 
                            "nd", "Number of new cases 22 March|129", "Total number hospitalised|277|28.7", 
                            "Total number admitted to ICU|36|3.7", "Total number of deaths|6", 
                            "Case Fatality Ratio (CFR )|0.6", "Total number of outbreaks or clusters|44", 
                            "Total number cases associated with clusters|243|25.2", "Total number of imported cases|201|20.8", 
                            "Number of cases in HCW|247|25.6", "Median age (years)|45", "Age range (years)|0-95"
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
                                                            -13L))

read_delim(x$Text, delim='|',
           skip=1, na = c('-'),
           col_names = c('Characteristic','Number','Pct')) %>%
  mutate(Date = dmy('08.04.2020'))

Посмотрите, как столбец «Текст» выбран из объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...