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

使用mutate创建line_id列时出现类型转换错误,寻求解决方案

问题解决:创建line_id列时的类型转换错误

错误原因分析

你的错误根源不在line_id的生成步骤,而是文本拆分阶段的代码逻辑错误:

  • enframe(strsplit(text, split = "\n"))用法错误:strsplit返回的是列表,直接用enframe会把整个列表转为一个单一的dataframe,而非对每行文本的拆分结果单独处理,导致后续unnest后生成的dataframe存在结构异常(比如包含列表列),触发后续mutate时的类型不匹配错误。
  • str_remove(doc_id, ".txt")中的.未转义:.在正则表达式中匹配任意字符,会错误移除doc_id中任意字符加txt的部分,而非仅移除.txt后缀。

修复后的代码

推荐用更简洁的separate_rows直接完成文本拆分,避免嵌套结构问题:

split_text <- raw_text %>%
  separate_rows(text, sep = "\n") %>%  # 按换行符直接拆分文本为多行
  rename(text_raw = text) %>%
  mutate(doc_id = str_remove(doc_id, "\\.txt")) %>%  # 转义点号,精准移除.txt后缀
  filter(text_raw != "") %>%  # 移除空行
  mutate(line_id = row_number())

如果坚持使用strsplit+enframe,需用map对每行单独处理:

split_text <- raw_text %>%
  mutate(text = map(strsplit(text, "\n"), ~enframe(.x, name = NULL, value = "text_raw"))) %>%
  unnest(text) %>%
  mutate(doc_id = str_remove(doc_id, "\\.txt")) %>%
  filter(text_raw != "") %>%
  mutate(line_id = row_number())

验证要点

  • 运行前可先用glimpse(raw_text)检查原数据的列类型,确保text是字符列,无嵌套结构。
  • 拆分后用glimpse(split_text)确认所有列都是常规类型(无列表列),再执行line_id生成步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:50:24