gpt4 book ai didi

r - R:提取文件名的一部分

转载 作者:行者123 更新时间:2023-12-04 22:21:22 25 4
gpt4 key购买 nike

我正在尝试使用R提取文件名的一部分,我对如何从此处执行此操作有一个模糊的想法:extract part of a file name in R
但是我不能完全在我的文件名列表中使用它

文件名示例:

"Species Count (2011-12-15-07-09-39).xls"
"Species Count 0511.xls"
"Species Count 151112.xls"
"Species Count1011.xls"
"Species Count2012-01.xls"
"Species Count201207.xls"
"Species Count2013-01-15.xls"

一些文件名在“物种计数”和日期之间有一个空格,一些文件名没有空格,并且它们的长度不同,并且某些文件名包含括号。我只想提取文件名的数字部分并保持-不变。因此,例如,对于上面的数据,我将有:

预期产量:
2011-12-15-07-09-39 , 0511 , 151112 , 1011 , 2012-01 , 201207 , 2013-01-15

最佳答案

这是一种方法:

regmatches(tt, regexpr("[0-9].*[0-9]", tt))

我假设您的文件名中没有其他数字。因此,我们只搜索一个数字的开头,然后使用贪婪的运算符 .*即可捕获到最后一个数字为止的所有内容。这是使用 regexpr完成的,它将获取匹配的位置。然后,我们使用 regmatches从这些匹配的位置中提取(sub)字符串。

其中 tt是:
tt <- c("Species Count (2011-12-15-07-09-39).xls", "Species Count 0511.xls", 
"Species Count 151112.xls", "Species Count1011.xls",
"Species Count2012-01.xls", "Species Count201207.xls",
"Species Count2013-01-15.xls")

基准测试:

注意:基准测试结果在Windows和* nix机器之间可能有所不同(如@Hansi在下面的注释中所述)。

那里有一些不错的答案。因此,现在是进行基准测试的时间了:)
tt <- rep(tt, 1e5) # tt is from above

require(microbenchmark)
require(stringr)
aa <- function() regmatches(tt, regexpr("[0-9].*[0-9]", tt))
bb <- function() gsub("[A-z \\.\\(\\)]", "", tt)
cc <- function() str_extract(tt,'([0-9]|[0-9][-])+')

microbenchmark(arun <- aa(), agstudy <- cc(), Jean <- bb(), times=25)
Unit: seconds
expr min lq median uq max neval
arun <- aa() 1.951362 2.064055 2.198644 2.397724 3.236296 25
agstudy <- cc() 2.489993 2.685285 2.991796 3.198133 3.762166 25
Jean <- bb() 7.824638 8.026595 9.145490 9.788539 10.926665 25

identical(arun, agstudy) # TRUE
identical(arun, Jean) # TRUE

关于r - R:提取文件名的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18081510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com