Как извлечь все числа до и после указанного ключевого слова c? - PullRequest
0 голосов
/ 04 августа 2020

Я новичок в R и последние 2 месяца провел на этом веб-сайте, пытаясь узнать больше. Я хочу получить информацию из набора данных, в котором есть ключевое слово c, а затем из тех, в которых оно есть, я хочу извлечь 5 слов до и после этого ключевого слова. Затем я хочу знать, какой номер (а) рядом с ними в том же предложении.

Чтобы объяснить «Почему», у меня есть список билетов, я хочу вытащить все названия билетов. Затем я хочу узнать из этого списка тех билетов, которые запрашивают дополнительное хранилище. Если да, то я хочу знать, сколько памяти они просят, и позже я создам действия в зависимости от того, сколько памяти они просят (но это позже).

Пример кода Я закончил (это немного беспорядочно, я все еще работаю над лучшим / более чистым способом, я новичок в R).

Ключевое слово, которое я ищу: Storage

Dataframe, обозначенный как: DF, DF2, DF3 et c.

Столбец из DF: Заголовок

#Check for keyword#
grep("storage", DF$Title, ignore.case=true)

#Pull words before and after keywords, this is case sensitive for some reason so I have to do it twice and merge the data frames, it also creates a list instead of a data frame so I have to change that into a data frame...Messy I know#
DF2 <- stringr::str_extract_all(DF$Title, "([^\\s]+\\s){0,5}Storage(\\s[^\\s]+){0,5}")

#Turn list into dataframe#
DF3 <- do.call(rbind.data.frame, DF2)

#Pull words before and after but in lower case, same as step two#
DF4 <- stringr::str_extract_all(DF$Title, "([^\\s]+\\s){0,5}storage(\\s[^\\s]+){0,5}")

#Turn list into dataframe#
DF5 <- do.call(rbind.data.frame, DF4)

#Change column names ( I have to do this to merge them via rbind)
DF6 <- setnames(DF3, c("Keyword")
DF7 <- setnames(DF5, c("Keyword")

#Merge both data frames together#
DF6 <- rbind(DF6,Df7)

Я хочу проверить запрошенный объем памяти, поэтому я ' м пытаюсь найти номер, относящийся к ГБ или ТБ, и т. д. c. Я пробовал множество кодов, но многие вытаскивают только числа или числа сразу после ключевого слова, а не все числа в предложении.

Пример того, что я пробовал с ним, не работает

DFTest <- as.integer(str_match(DF6, "(?i\\bGB:?\\s*(\\d+")[,2])

1 Ответ

1 голос
/ 04 августа 2020

Следующий подход будет извлекать все числа перед определенным ключевым словом c (в этом случае я использовал AND) или после ключевого слова. Вы можете изменить свое ключевое слово в шаблоне regex .

library(tidyverse)

df <- data.frame(obs = 1:5, COL_D = c("2019AND", "AND1999", "101AND", "AND12", "20AND1999999"))

df2 <- df %>% 
  mutate(Extracted_Num = str_extract_all(COL_D, regex("\\d+(?=AND)|(?<=AND)\\d+")))

# obs        COL_D Extracted_Num
# 1   1      2019AND          2019
# 2   2      AND1999          1999
# 3   3       101AND           101
# 4   4        AND12            12
# 5   5 20AND1999999   20, 1999999
...