0

我在一个目录中有很多文件,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("_"));
}
4

3 回答 3

2

可能最容易删除第一个之后的所有内容_

sub("_.*$", "", files)
于 2013-11-01T01:48:38.630 回答
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)
于 2013-11-01T01:27:37.567 回答
0

这是另一个版本。列出所有文件

myfiles <- list.files(path="./dir")

在“_”上拆分每个文件名并保留第一部分

myfiles.pre <- sapply(myfiles, function(x) strsplit(x,"_",fixed=T)[[1]][1])
于 2013-11-01T01:50:36.690 回答