从R

时间:2016-12-28 05:32:37

标签: r regex csv filenames

我试图从多个文件名中提取数值,例如我有 abc_2.csv等文件名; pow_4.csv; foo_5.csv ...等等,我试图只从文件名中提取最后一个数值。我曾尝试一次提取一个文件,但想完全这样做,这就是我试过的一个

  

单个文件

>nop <- basename("D:/files/abc_2.csv")
>nop <- as.numeric(gsub("\\D+", "", nop))
>nop
  2
  

用于多个文件

setwd("D:/files")
temp = list.files(pattern="*.csv")
myfiles = lapply(temp, read.delim)

提前致谢...

3 个答案:

答案 0 :(得分:1)

您需要stri_extract_last(...)库中的stringi

library('stringi')
t = c("abc_2.csv","pow_4.csv","foo_5.csv")

stri_extract_last(t, regex = "(\\d+)")

答案 1 :(得分:1)

只需扩展您的解决方案:

setwd("D:/location")
temp = list.files(pattern=".*_\\d+.csv") # this will ensure only the selective files(with the specified pattern) are chosen, and not all the files in directory
unlist(lapply(temp, function(x) gsub( "(.*_|\\.csv)", "", x)))
#[1] "2" "4" "5"

答案 2 :(得分:0)

我们可以使用regmatches/regexpr

中的base R
regmatches(t, regexpr( "\\d+", t))
#[1] "2" "4" "5"

如果是提取的最后一个数字

sub(".*(\\d+)\\D+$", "\\1", t)

sapply(regmatches(t, gregexpr( "\\d+", t)), tail, 1)

数据

t <- c("abc_2.csv","pow_4.csv","foo_5.csv")