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

tidyverse中将字符串按换行符分割为data.frame行的问题求解

错误原因

你的代码报错是因为管道将tibble对象直接传递给str_split()时,函数默认将tibble作为待处理的字符串输入,str_split()无法直接识别tibble类型的输入值,同时重复指定string参数导致逻辑冲突,因此触发类型强制转换警告,最终输出NA。

正确实现代码

tidyverse体系下有两种常用的实现方案,均可得到你需要的输出:

方案1:str_split()结合unnest()

library(tidyverse)
Test <- "ASD 7\nDEF \n This"

tb <- tibble(Test = Test) %>% 
  # 按换行符分割字符串,生成列表列
  mutate(split_res = str_split(Test, pattern = "\n")) %>% 
  # 将列表列拆分为独立行
  unnest(split_res) %>% 
  # 去除每个字符串前后的空白,匹配期望输出
  mutate(split_res = str_trim(split_res)) %>% 
  # 按需保留列,此处仅保留拆分结果列
  select(split_res)

方案2:直接使用separate_rows()(更简便)

separate_rows()是tidyr专门用于将单元格按分隔符拆分为多行的函数,写法更简洁:

library(tidyverse)
Test <- "ASD 7\nDEF \n This"

tb <- tibble(Test = Test) %>% 
  # 直接按换行符拆分列并转为多行
  separate_rows(Test, sep = "\n") %>% 
  # 去除前后空白
  mutate(Test = str_trim(Test))

输出结果

两种方案最终得到的tibble如下,完全匹配你的预期:

# A tibble: 3 × 1
  Test 
  <chr>
1 ASD 7
2 DEF  
3 This 

如果你不需要去除字符串前后的空格,删除str_trim()对应的步骤即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 22:45:08