You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在R语言中按字符串前半部分对.dat文件名分组?

按文件名前缀分组.dat文件的R实现方案

针对你要把成对的.dat文件按共同前缀分组的需求,这里有几种实用的方法,同时先纠正下你现有代码里的一个小问题:

第一步:修正文件过滤的正则表达式

你原代码里的grepl("*.dat$", files)存在正则语法问题——*在正则中是量词(匹配前面字符0次或多次),不是通配符。正确的写法应该用\\.dat$来匹配以.dat结尾的文件:

# 你的自定义目录函数(示例实现)
get_directory <- function() {
  getwd() # 假设返回当前工作目录,可根据你的需求修改
}

# 获取目标目录下所有.dat文件
files <- list.files(get_directory())
files <- files[grepl("\\.dat$", files)]

方法一:基础R实现(split函数)

核心思路是先提取每个文件名的共同前缀(比如从2^5-3^3-18-simul.dat中提取2^5-3^3-18),再用split按前缀分组:

# 提取分组标识:去掉最后一个'-'到'.dat'之间的所有内容
group_ids <- sub("-[^-]+\\.dat$", "", files)

# 按标识分组,得到列表格式的分组结果
file_groups <- split(files, group_ids)

运行后,file_groups会是一个命名列表:每个列表元素的名称是分组前缀,元素内容是对应组的两个文件名,比如:

$`2^5-3^3-18`
[1] "2^5-3^3-18-simul.dat"   "2^5-3^3-18-uniform.dat"

$`2^7-3^4-33`
[1] "2^7-3^4-33-simul.dat"   "2^7-3^4-33-uniform.dat"

方法二:tidyverse风格实现(适合管道流)

如果你习惯用tidyverse工具链,可以用str_remove提取分组标识,再用group_split分组:

library(tidyverse)

file_groups <- tibble(file_name = files) %>%
  # 提取分组前缀
  mutate(group_id = str_remove(file_name, "-[^-]+\\.dat$")) %>%
  # 按分组前缀拆分
  group_split(group_id, .keep = FALSE)

这种方法得到的是tibble对象的列表,每个元素对应一组文件,方便后续进行数据处理(比如批量读取文件)。

额外提示

如果你的文件名后缀(simul/uniform)是固定的,也可以用更精准的正则来提取分组标识,比如:

group_ids <- sub("-(simul|uniform)\\.dat$", "", files)

这样只会匹配以-simul.dat-uniform.dat结尾的文件,避免意外匹配其他格式的文件名。

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

火山引擎 最新活动