如何在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
相关产品推荐
相关产品推荐

