You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何将数据框单条观测拆分为多条并匹配对应title标签

解决方法

核心思路

  • 先对text列按换行符\n拆分为长表,每行对应一条独立发言,原行对应的title会自动关联到拆分后的每一行
  • 再从拆分后的单条发言里分别提取姓名和发言内容,你原有自定义的姓名匹配规则可以直接复用,只需要补全R字符串要求的转义符即可

完整可运行代码(tidyverse 写法,逻辑清晰易修改)

# 加载依赖包
library(tidyverse)

# 原始数据
title <- c("title1","title2")
text <- c("Mr.A.Speech1.\nMr.B.Speech2.\nMr.C.Speech3\n","Mrs.D.Speech4.\nMs.E.Speech5.\n")
df<- data.frame(title, text)

# 姓名匹配正则,注意R字符串里转义符要写双反斜杠
name_pattern <- "\\bM(?:rs?|s)\\.\\s[:upper:]{1,20}\\s?c?'?-?[:upper:]{1,20}\\s?o?f?\\s?|The\\sSPEAKER|The\\sPRESIDING\\s"

# 处理逻辑
df_result <- df %>%
  # 按换行拆分text为长表,自动保留对应title
  separate_longer_delim(text, delim = "\n") %>%
  # 过滤换行结尾产生的空行
  filter(text != "") %>%
  # 提取姓名、提取发言内容
  mutate(
    Name = str_extract(text, name_pattern),
    Text = str_remove(text, name_pattern)
  ) %>%
  # 调整列顺序和列名匹配你要的输出格式
  select(Title = title, Name, Text)

注:你给出的目标示例中第4、5行的Title标注有误,实际对应原始数据的title2,代码运行后会自动匹配为正确的title。

基础R实现方法(不用额外安装包)

# 拆分每行text,同时统计每行拆分出的发言条数
split_text <- strsplit(df$text, "\n")
row_n <- sapply(split_text, length)
# 生成和拆分后行数一一对应的title向量
rep_title <- rep(df$title, row_n)
# 生成长表
df_long <- data.frame(
  Title = rep_title,
  text = unlist(split_text)
)
# 过滤空行
df_long <- df_long[df_long$text != "", ]
# 匹配提取姓名和内容,和上方tidyverse写法逻辑一致
name_pattern <- "\\bM(?:rs?|s)\\.\\s[:upper:]{1,20}\\s?c?'?-?[:upper:]{1,20}\\s?o?f?\\s?|The\\sSPEAKER|The\\sPRESIDING\\s"
df_long$Name <- str_extract(df_long$text, name_pattern)
df_long$Text <- str_remove(df_long$text, name_pattern)
df_result <- df_long[, c("Title", "Name", "Text")]

内容的提问来源于stack exchange,提问作者Foulball

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:09:01