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

如何拆分分类TXT文本行并将其转换为R中的table/tibble对象

实现方案

你不需要嵌套while循环,只要额外加一个变量记录当前遍历到的最新物种名称即可,完整代码如下:

library(stringr)
library(tibble)
library(dplyr) # 仅用于最后过滤行,不需要可以删掉

# 读取原始数据
raw_lines <- readLines("data.txt")
# 去除行尾空格和空行,避免格式干扰(可选)
raw_lines <- str_trim(raw_lines, side = "right")
raw_lines <- raw_lines[raw_lines != ""]

# 初始化容器和当前物种缓存变量
species_col <- vector(length = length(raw_lines))
entry_col <- vector(length = length(raw_lines))
current_species <- ""

for (i in seq_along(raw_lines)) {
  # 判断是否为顶层物种行:前3个字符不是空格
  if (str_sub(raw_lines[i], 1, 3) != "   ") {
    current_species <- raw_lines[i]
    species_col[i] <- current_species
    entry_col[i] <- NA
  } else {
    # 从属条目直接使用缓存的当前物种,内容去除前导空格
    species_col[i] <- current_species
    entry_col[i] <- str_trim(raw_lines[i], side = "left")
  }
}

# 生成最终结构化表格
result_df <- tibble(
  物种名称 = species_col,
  从属条目 = entry_col
) %>% 
  filter(!is.na(从属条目)) # 过滤掉顶层物种行,只保留从属记录行

如果你不需要加载dplyr,过滤行可以替换为base R语法:result_df <- result_df[!is.na(result_df$从属条目), ]

逻辑说明

  • 用current_species变量缓存最近一次识别到的顶层物种名,遍历过程中仅当遇到新的顶层行时更新该变量
  • 所有从属行直接匹配当前缓存的物种名,自动完成多对一的关联
  • 额外的空行、空格清理逻辑适配Word导出TXT常见的格式冗余问题,可根据你的实际文本格式调整判断条件(比如如果顶层行是数字+点开头,也可以用正则str_detect(raw_lines[i], "^\\d+\\.")判断,准确度更高)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:24:03