Расщепление строки с использованием шаблона в R - PullRequest
0 голосов
/ 26 ноября 2018

Этот вопрос основывается на моем предыдущем вопросе относительно Разделение и группировка простого текста (группировка текста по главам в фрейме данных)?

С помощью Шри я смог получить большую частьмой документ вычищен!Мне удалось создать два столбца из списка - первый столбец - это номер главы, а второй столбец - это текст, принадлежащий этой главе, но я столкнулся с более сложным текстом.

Это худший вариантпример моих данных:

                                               x
1                                     Chapter 1.
2                              Chapter one text.
3 Chapter one text. Chapter 2. Chapter two text.
4                              Chapter two text.
5                                     Chapter 3.
6                            Chapter three text.
7                            Chapter three text.
8                   Chapter 4. Chapter four text
9                             Chapter four text.

df <- structure(list(x = c("Chapter 1. ", "Chapter one text. ", "Chapter one text. Chapter 2. Chapter two text. ", 
                           "Chapter two text. ", "Chapter 3. ", "Chapter three text. ", "Chapter three text. ", 
                           "Chapter 4. Chapter four text ","Chapter four text. ")), 
                .Names = "x", class = "data.frame", row.names = c(NA, -9L))

Мне нужно структурировать их следующим образом (номер главы, а затем текст главы для этой главы в порядке идентификатора), чтобы я мог применить функцию из моего предыдущего поста и разделитьэто чисто:

                       x
1           Chapter 1. 
2    Chapter one text. 
3     Chapter one text.
4            Chapter 2.
5    Chapter two text. 
6    Chapter two text. 
7           Chapter 3. 
8  Chapter three text. 
9  Chapter three text. 
10           Chapter 4.
11   Chapter four text 
12  Chapter four text. 

Это кажется простой задачей, где я мог бы разбить строку, используя регулярное выражение, ища Глава # ("Глава [0-9]"), а затем разделить ее снова с подобной логикой, чтобы получитьглава и текст в отдельных строках.Тем не менее, я застрял здесь после попытки многих попыток с функциями str_split, gsub, separate_rows.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 26 ноября 2018

Мы могли бы использовать separate_rows, разделив пробел после . (Здесь мы использовали обходное выражение регулярного выражения, чтобы соответствовать пробелу (\\s) после точки.

library(tidyverse)
df %>% 
   separate_rows(x, sep="(?<=[.])\\s") %>% 
   filter(x!='')
#                  x
#1           Chapter 1.
#2    Chapter one text.
#3    Chapter one text.
#4           Chapter 2.
#5    Chapter two text.
#6    Chapter two text.
#7           Chapter 3.
#8  Chapter three text.
#9  Chapter three text.
#10          Chapter 4.
#11  Chapter four text 
#12  Chapter four text.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...