我在目录dir
中有很多文件,格式如下
[xyz][sequence of numbers or letters]_[single number]_[more stuff that does not matter].csv
例如xyz39289_3_8932jda.csv
我想写一个函数,它返回该目录中所有文件名的所有第一部分。第一部分,我的意思是[xyz][sequence of numbers]
部分。因此,在上面的示例中,这将包括xyz39289
。因此,该函数最终将返回一个列表,如
[xyz39289, xyz9382, xyz03319927, etc]
我怎样才能在R中这样做?在Java中,我会执行以下操作:
File[] files = new File(dir).listFiles();
ArrayList<String> output = new ArrayList<String>();
for(int i = 0; i < files.length; i++) {
output.add(files[i].getName().substring(0,files[i].getName().indexOf("_"));
}
答案 0 :(得分:2)
最容易删除第一个_
之后的所有内容。
sub("_.*$", "", files)
答案 1 :(得分:0)
使用list.files
获取文件列表后(可能只提取您希望以xyz
开头的文件),我会使用sub
。
files <- list.files(dir)
files <- files[grep("^xyz",files, perl = TRUE)]
filepart <- sub("^(xyz[^_]*)_.*$","\\1",files, perl = TRUE)
还有一种我不太确定的regexpr
方法。像
files <- list.files(dir)
matchdat <- regexpr("^xyz.*?(?=_)",files, perl = TRUE)
filepart <- regmatches(test,matchdat)
答案 2 :(得分:0)
这是另一个版本。列出所有文件
myfiles <- list.files(path="./dir")
将每个文件名拆分为“_”并保留第一部分
myfiles.pre <- sapply(myfiles, function(x) strsplit(x,"_",fixed=T)[[1]][1])