Я собираюсь предложить вам взглянуть на решение Tidyverse для этого.Конечно, его можно обрабатывать с помощью base-R и data.table
(как другие могут предложить в комментариях или ответах), но это хорошее начало.
Во-первых, подделка данных.
txt <- readLines(textConnection('Acc1 "product"="A A","product"="B","product"="C"
Acc2 "product"="C","product"="D"'))
В вашем случае вы, вероятно, просто сделаете readLines(filename)
.
Этот следующий блок отделяет материал "Acc" от остальных.
txtsplit <- strsplit(gsub("^(\\S+)\\s+", "\\1|", txt), "\\|")
И, наконец, остальныеобработка.
library(dplyr)
library(tidyr)
data_frame(
Col1 = sapply(txtsplit, `[[`, 1),
Col2 = sapply(txtsplit, `[[`, 2)
) %>%
mutate(
Col2 = gsub('"product"=', '', Col2),
Col2 = strsplit(Col2, ",")
) %>%
unnest() %>%
mutate(
Col2 = gsub('"', '', Col2)
)
# # A tibble: 5 x 2
# Col1 Col2
# <chr> <chr>
# 1 Acc1 A A
# 2 Acc1 B
# 3 Acc1 C
# 4 Acc2 C
# 5 Acc2 D
Существует несколько хороших руководств по использованию dplyr
и tidyr
, быстрый поиск найдет лучше / новее, чем я могу опубликовать здесь.
Кстати: яраздельное удаление кавычек в отдельный mutate
, но это можно было легко обработать в начальном gsub
.Я решил оставить его отдельно, если в кавычках было больше, чем просто буквы, где их удаление может позже вызвать проблемы с синтаксическим анализом.