使用R将txt文本行转列并将指标名设为表头的实现方法
解决思路
你的原始代码出错核心是读入文件的方式不对:read_table默认按空白符拆分列,会把原本单行的指标: 值结构拆乱,还会把分隔线、空行识别成异常数据,后续的转换逻辑自然无法得到预期结果。
你可以用逐行读取的方式先清洗脏数据,再拆分键值对,最后转成宽表即可,完整实现如下:
实现代码
library(tidyverse) # 逐行读入文件,自动跳过空行 raw_lines <- read_lines("summary.txt", skip_empty_rows = TRUE) result <- raw_lines %>% # 过滤掉所有由横线组成的分隔行 str_subset("^-+$", negate = TRUE) %>% # 过滤掉没有对应数值的无效行(比如末尾只有冒号的Annotation行) str_subset(":.+") %>% # 按`: `把每行拆成指标名、数值两列 str_split_fixed(": ", n = 2) %>% as_tibble(.name_repair = ~c("metric", "value")) %>% # 如果你只需要INDEL相关的三个指标,保留这行;需要全量指标就删除这行 filter(str_detect(metric, "INDEL")) %>% # 转成宽表,指标名作为列名 pivot_wider(names_from = metric, values_from = value) %>% # 可选:将值转为数值类型,方便后续计算 mutate(across(everything(), as.numeric)) # 查看结果 print(result) # 导出为制表符分隔的文件,和你给出的示例格式一致 write_tsv(result, "processed_summary.txt", col_names = TRUE)
输出效果
运行后得到的结果结构和你要求的完全一致:
Precision_INDEL Sensitivity_INDEL F_Measure_INDEL <dbl> <dbl> <dbl> 0.1199 0.941 0.213
内容的提问来源于stack exchange,提问作者nbn
相关产品推荐
相关产品推荐

