Извлечение определенного значения из строковой переменной в r

#r #string #extract

#r #строка #извлечение

Вопрос:

У меня есть символьная переменная. Мне нужно извлечь информацию из title="" значения. В принципе, мне нужны все значения внутри "" сразу после title= .

Вот пример набора данных:

 df <- data.frame(
  id = c(1,2,3),
  character = c('mrowamp;>amp;<mnamp;>2amp;<mnamp;>amp;<miamp;>hamp;<miamp;>amp;<m title="h r=2"amp;>amp;<mstyle',
        'mrowamp;>amp;<mnamp;>2amp;<mnamp;>amp;<miamp;>hamp;<miamp;>amp;<m title="r 2h=h"amp;>amp;<mstyleamp;',
        'mrowamp;>amp;<mnamp;>2amp;<mnamp;>amp;<miamp;>hamp;<miamp;>amp;<m title="h∙rleft(frac{2h}{2}right)"amp;>amp;<mstyleamp;gt'))

> df
  id                                                                                                  character
1  1                        mrowamp;>amp;<mnamp;>2amp;<mnamp;>amp;<miamp;>hamp;<miamp;>amp;<m title="h r=2"amp;>amp;<mstyle
2  2                      mrowamp;>amp;<mnamp;>2amp;<mnamp;>amp;<miamp;>hamp;<miamp;>amp;<m title="r 2h=h"amp;>amp;<mstyleamp;
3  3 mrowamp;>amp;<mnamp;>2amp;<mnamp;>amp;<miamp;>hamp;<miamp;>amp;<m title="h·rleft(frac{2h}{2}right)"amp;>amp;<mstyleamp;gt
  

Мой желаемый результат будет:

 > df
  id                 character
1  1                     h r=2
2  2                    r 2h=h
3  3 h·rleft(frac{2h}{2}right)
  

Комментарии:

1. within(df, character <- gsub('title="([^"] )|.', '\1', df$character)) для этого вам не нужны дополнительные пакеты

Ответ №1:

Попробуйте это

 library(dplyr)
df %>% mutate(character = sub(". title="(. )". ", "\1", character))
  

Ответ №2:

Вы должны использовать regex101 для создания подходящего регулярного выражения:

https://regex101.com/r/OFJhnQ/1

Затем вы можете использовать str_extract для получения значения.

Или вы используете extract функцию из tidyr:

 df %>% tidyr::extract(character, "title", regex="title="(. )"")