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

如何在R中基于分隔符\n-拆分数据框中的长字符串

解决R数据框中指定列按\n-拆分的问题

模拟数据构造

先还原你的数据场景:

library(tidyverse)

df <- tibble(
  Sr_no = 1:3,
  Col1 = c(
    "Lorem Ipsum is simply dummied text",
    "\n- Lorem Ipsum is simply dummied text,\n- Lorem Ipsum is simply dummied text ,\n- Lorem Ipsum is simply dummied text",
    "\n- Lorem Ipsum is simply dummied text,\n- Lorem Ipsum is simply dummied text ,\n- Lorem Ipsum is simply dummied text"
  )
)

解决方案

你之前用str_split()/str_split_fixed()没成功,大概率是没处理开头的空字符串和元素里的冗余空格、逗号。下面提供两种可行方法:

方法1:用str_split() + unnest_wider()

df_processed <- df %>%
  # 保存原始Col1值,用于第一条记录的填充
  mutate(original_col = Col1) %>%
  # 按\n-拆分,过滤空元素,同时清理前后空格和末尾逗号
  mutate(
    split_col = map(
      str_split(Col1, "\n-"), 
      ~ str_remove(trimws(.x[.x != ""]), ",$")
    )
  ) %>%
  # 将拆分后的列表拆分为多列
  unnest_wider(split_col, names_sep = "") %>%
  # 按需求赋值:第一条记录保留原Col1,其余用拆分后的数据填充
  mutate(
    Col1 = if_else(Sr_no == 1, original_col, Col11),
    Col2 = if_else(Sr_no == 1, NA_character_, Col12),
    Col3 = if_else(Sr_no == 1, NA_character_, Col13)
  ) %>%
  # 保留需要的列
  select(Sr_no, Col1, Col2, Col3)

方法2:用str_split_fixed()(更简洁)

df_processed <- df %>%
  # 按\n-拆分,取后3列(跳过开头的空元素),清理格式
  mutate(
    split_data = str_split_fixed(Col1, "\n-", n = 4)[, -1],
    split_data = str_remove(trimws(split_data), ",$")
  ) %>%
  # 赋值并整理列
  mutate(
    Col1 = if_else(Sr_no == 1, Col1, split_data[,1]),
    Col2 = if_else(Sr_no == 1, NA_character_, split_data[,2]),
    Col3 = if_else(Sr_no == 1, NA_character_, split_data[,3])
  ) %>%
  select(Sr_no, Col1, Col2, Col3)

最终效果

处理后的数据框会和你期望的一致:

  • Sr_no=1的记录Col1保留原始值,Col2、Col3为空
  • Sr_no≥2的记录,Col1、Col2、Col3分别填充拆分后的三段文本,且清理了冗余的空格和逗号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:36:24