Как создать фрейм данных, извлекая строки до и после специального символа в R с помощью REGEX - PullRequest
0 голосов
/ 31 мая 2018

У меня есть вектор строк (> 100K элементов) с именем VEC , из которого я хотел бы извлечь данные для формирования фрейма данных;примеры элементов приведены ниже

VEC[1]

"today's performance: SW= 33.9; west =13.85 East=70.09 and the north central =125.823, S.S. = 41.5"

VEC[2]

"sent as received South= 28.76  while the West =44.55, SouthEast=64.32;  north-east =130;  south west = 38.86"

...

Я хочу вывод как:

Data output

Имена столбцов не должны быть такими, как у меняуказано, но должно быть однородным для правильного определения переменных.

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

m <- gregexpr("[[:digit:]]+\\.*[[:digit:]]*", VEC, perl=TRUE)
regmatches(VEC, m)

1 Ответ

0 голосов
/ 31 мая 2018

Знаете ли вы все альтернативные варианты написания, например, SW против юго-запада?Для меня это кажется очень важным, поскольку места не в порядке.Если это так, возможно, вы могли бы сделать что-то вроде этого:

pat <- "SW|south west" #alternate spellings
i <- regmatches(VEC,regexec(pat,VEC)) # find them per string
i[lengths(i) == 0] <- NA_character_ # convert zeros to nas
i <- unlist(i)
f <- function(x) gsub(paste0(".*?(?<=",i[x],")\\D+(\\d+\\.?\\d*).*"),"\\1",VEC[x],perl = T) # some regex function to extract numbers after string occurence
SW <- sapply(seq_along(VEC),f) # extract

> SW
[1] "33.9"  "38.86"

Повторите для каждого столбца

Вероятно, необходимо настроить функцию, чтобы приспособиться к NAS, возможно, обернуть в ifelse()

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