使用R(Tidyverse)/Excel Power Query将txt植被调查数据转为目标CSV表
你的txt数据格式规则统一,完全可以实现目标字段提取,以下是两个可直接落地的操作方案:
方案1:Excel Power Query 操作(无需编写复杂代码)
- 导入数据:选择Excel「数据」选项卡下的「从文本/CSV」,选中你的txt文件导入,导入时不做自动拆分,将所有内容加载为单列,列名可设为
raw_text - 筛选有效行:添加索引列后,仅保留行内容以
Plot、CVS: class、CSR: C:开头的行,其余无关行全部删除 - 提取字段:
- 对
Plot开头的行,提取后方数字作为PLOT字段值 - 对
CVS: class开头的行,提取后方数字作为CVS字段值 - 对
CSR: C:开头的行,分别提取C、S、R后方的数值,拆分为三个独立字段
- 对
- 合并数据:每个样地对应3行有效数据,按行号每3行分为一组,将同组字段透视到同一行,调整列顺序即可得到目标表格。
方案2:R语言Tidyverse 实现(处理速度快,适合1600个样地的批量场景)
替换代码中的文件路径为你本地的txt文件路径,直接运行即可得到结果:
library(tidyverse) # 替换为你的txt文件本地路径 input_file <- "你的植被调查数据.txt" df_result <- read_lines(input_file) %>% # 移除所有空行 discard(~ .x == "") %>% # 逐行匹配提取目标字段 map_dfr(~{ if (str_starts(.x, "Plot ")) { tibble(PLOT = as.numeric(str_extract(.x, "(?<=Plot )\\d+"))) } else if (str_starts(.x, "CVS: class ")) { tibble(CVS = as.numeric(str_extract(.x, "(?<=CVS: class )\\d+"))) } else if (str_starts(.x, "CSR: C:")) { tibble( C = as.numeric(str_extract(.x, "(?<=C: )\\d+\\.?\\d*")), S = as.numeric(str_extract(.x, "(?<=S: )\\d+\\.?\\d*")), R = as.numeric(str_extract(.x, "(?<=R: )\\d+\\.?\\d*")) ) } else { NULL } }) %>% # 向下填充PLOT、CVS字段,匹配到对应的CSR数值行 fill(PLOT, CVS, .direction = "down") %>% # 移除空值行,仅保留完整数据 drop_na(C, S, R) # 预览结果 print(df_result) # 导出为CSV格式表格 write_csv(df_result, "样地指标提取结果.csv")
代码完全匹配你给出的文本格式规则,不需要额外调整正则逻辑,全量1600个样地的处理时长不超过1秒,不会出现错配漏配问题。
内容的提问来源于stack exchange,提问作者user197410
相关产品推荐
相关产品推荐

