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

如何在R中将.txt转.csv并拆分入侵植物信息列

解决R语言中txt转csv并拆分列的问题

修改后的完整代码

# 获取所有目标txt文件
filelist <- list.files(pattern = "\\.txt$")

# 循环处理每个文件
for (i in seq_along(filelist)) {
  input <- filelist[i]
  output <- paste0(gsub("\\.txt$", "", input), ".csv")
  cat("Processing the file:", input, "\n")
  
  # 读取文件所有行,跳过第一行的标题行
  lines <- readLines(input)[-1]
  
  # 逐行清理并拆分数据
  processed_lines <- lapply(lines, function(line) {
    # 移除开头的'(a)'类编号及后续空格,同时清理首尾空白
    line_clean <- gsub("^\\([a-z]\\)\\s*", "", trimws(line))
    
    # 按长破折号'–'拆分,忽略破折号前后的空格
    split_parts <- strsplit(line_clean, "\\s*–\\s*")[[1]]
    
    # 拆分学名的属和种
    scientific_name <- trimws(split_parts[1])
    genus_species <- strsplit(scientific_name, "\\s+")[[1]]
    genus <- genus_species[1]
    species <- if(length(genus_species) > 1) paste(genus_species[-1], collapse = " ") else ""
    
    # 提取通用名
    common_name <- if(length(split_parts) > 1) trimws(split_parts[2]) else ""
    
    # 返回整理后的单行数据
    data.frame(属 = genus, 种 = species, 通用名 = common_name, stringsAsFactors = FALSE)
  })
  
  # 合并所有行成完整数据框
  final_data <- do.call(rbind, processed_lines)
  
  # 写入csv文件,指定UTF-8编码避免中文乱码
  write.csv(final_data, file = output, row.names = FALSE, fileEncoding = "UTF-8")
}

关键步骤说明

  • 读取文件:用readLines读取所有行,[-1]跳过第一行的“有害杂草名录”标题。
  • 清理编号:通过正则表达式^\\([a-z]\\)\\s*匹配并删除开头的'(a)'、'(b)'类标识,trimws清理字符串首尾的冗余空格。
  • 拆分内容:用strsplit按长破折号拆分,正则\\s*–\\s*会自动忽略破折号前后的任意空格。
  • 拆分属种:将学名按空格拆分,第一部分作为属名,剩余部分合并为种名(兼容spp.这类多字符种名)。
  • 保存文件:用write.csv输出结果,指定fileEncoding = "UTF-8"确保中文正常显示。

示例输出效果

处理你提供的测试数据后,生成的csv会包含三列结构化内容:

属种通用名
Abrusprecatoriusrosary pea
Aeginetiaspp.aeginetia
Ageratinaadenophoracrofton weed
Alectraspp.alectra

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:57:24