Я чувствую, что моя ситуация является типичным случаем использования в экспериментах, когда данные записываются в виде текстового файла для понимания человеком, но не для машинного потребления. Теги перемежаются с фактическими данными для описания следующих данных. Для анализа данных теги должны быть интегрированы со строками данных, чтобы быть полезными. Ниже приведен пример.
TAG1, t1_1
DATA_A, 5, 3, 4, 8
DATA_A, 3, 4, 5, 7
TAG1, t1_2
TAG2, t2_1
DATA_B, 1, 2, 3, 4, 5
DATA_A, 1, 2, 3, 4
Желаемыми результатами разбора должны быть два кадра данных. Один для DATA_A,
X1, X2, X3, X4, TAG1, TAG2
5, 3, 4, 8, t1_1, NA
3, 4, 5, 7, t1_1, NA
1, 2, 3, 4, t1_2, t2_1
и один для DATA_B
X1, X2, X3, X4, X5, TAG1, TAG2
1, 2, 3, 4, 5, t1_2, t2_1
Текущий метод (реализованный в Python) проверяет файл строка за строкой. Если он начинается с «T», то соответствующая переменная тега обновляется; если он начинается с «DATA», то значения тегов добавляются в конец строки «DATA», а завершенная строка добавляется в соответствующий файл CSV. В конце файлы CSV считываются во фреймы данных для анализа данных.
Интересно, можно ли выполнить этот импорт данных быстрее за один шаг? Что я имею в виду, это
library(tidyverse)
text_frame <- read_lines(clipboard(), skip_empty_rows = TRUE) %>%
enframe(name = NULL, value = "line")
text_frame %>%
separate(line, into = c("ID", "value"), extra = "merge", sep = ", ")
, который производит
# A tibble: 7 x 2
ID value
<chr> <chr>
1 TAG1 t1_1
2 DATA_A 5, 3, 4, 8
3 DATA_A 3, 4, 5, 7
4 TAG1 t1_2
5 TAG2 t2_1
6 DATA_B 1, 2, 3, 4, 5
7 DATA_A 1, 2, 3, 4
Следующим шагом является создание новых столбцов «TAG1» и «TAG2» со значением, добавленным в строку. Вот где я застрял. Это как gather
для отдельных строк. Как я мог это сделать? Обоснован ли общий подход? Есть предложения?
Быстрые и эффективные по памяти решения приветствуются, поскольку мне нужно иметь дело с сотнями ~ 10 МБ текстовых файлов (они имеют одинаковую структуру).