R语言提取仿真统计文件每行统计项与首个数值的实现方法
解决方案
一、正则表达式修改方法
你之前的写法返回结果带前置空白,是因为str_extract默认返回整个正则匹配的内容,你写的\\s+(\\S+)会把前置的空白也纳入匹配结果。可以用以下两种方法修改:
- 用正向零宽断言:把提取数值的正则改为
"(?<=\\s)\\S+",零宽断言只会校验字符前置是否为空白,不会把空白本身纳入匹配结果,返回内容就是纯数值。 - 用
str_match取捕获组:执行str_match(line, "^\\S+\\s+(\\S+)")[,2],直接取第一个捕获组的内容,即可得到不带前置空白的数值。
二、更优雅的批量处理方案
你的统计文件格式非常规整,完全不需要逐行循环提取,直接用内置的表格读取函数即可一次性生成结构化的统计结果:
stats_df <- read.table( file = "你的统计文件路径", skip = 1, # 跳过开头的"---------- Begin Simulation Statistics ----------"注释行 header = FALSE, col.names = c("stat_name", "stat_value"), fill = TRUE, comment.char = "#", # 自动忽略#之后的所有注释内容 colClasses = c("character", "numeric") # 直接指定列类型,无需后续转换 )
执行后stats_df就是包含所有统计项名称和对应数值的数据框,后续可以直接按需求过滤、查询,比逐行处理效率高很多。
内容的提问来源于stack exchange,提问作者vic
相关产品推荐
相关产品推荐

