使用 R 中的模式拆分字符串
Splitting a string using a pattern in R
这个问题是基于我之前关于
的问题
在 Shree 的帮助下,我已经清理了大部分文档!已经能够从列表中创建两列 - 第一列是章节编号,第二列是属于该章节的文本,但我 运行 变成了一些更混乱的文本。
这是我的数据的最坏情况示例:
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))
我需要像这样构造它(章节编号,然后是该章节的章节文本,按 ID 顺序),这样我就可以应用我之前 post 的函数并将其干净地拆分:
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.
这似乎是一个简单的问题,我可以使用正则表达式拆分字符串以查找章节 # ("Chapter [0-9]"),然后使用类似的逻辑再次拆分它以将章节和文本分成单独的行。但是,在尝试使用 str_split
、gsub
、separate_rows
函数进行多次尝试后,我被困在这里。
感谢任何帮助。
我们可以通过在 .
之后的 space 拆分来使用 separate_rows
(在这里,我们使用正则表达式环视来匹配 space(\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.
这个问题是基于我之前关于
在 Shree 的帮助下,我已经清理了大部分文档!已经能够从列表中创建两列 - 第一列是章节编号,第二列是属于该章节的文本,但我 运行 变成了一些更混乱的文本。
这是我的数据的最坏情况示例:
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))
我需要像这样构造它(章节编号,然后是该章节的章节文本,按 ID 顺序),这样我就可以应用我之前 post 的函数并将其干净地拆分:
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.
这似乎是一个简单的问题,我可以使用正则表达式拆分字符串以查找章节 # ("Chapter [0-9]"),然后使用类似的逻辑再次拆分它以将章节和文本分成单独的行。但是,在尝试使用 str_split
、gsub
、separate_rows
函数进行多次尝试后,我被困在这里。
感谢任何帮助。
我们可以通过在 .
之后的 space 拆分来使用 separate_rows
(在这里,我们使用正则表达式环视来匹配 space(\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.