Estoy tratando de extraer un valor numérico de varios nombres de archivo, por ejemplo, tengo nombres de archivo como abc_2.csv; pow_4.csv; foo_5.csv ... etc., estoy tratando de extraer solo el último valor numérico del nombre del archivo. He intentado extraer un archivo a la vez pero quiero hacerlo por completo, esto es lo que he intentado para un

archivo único

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

para múltiples archivos

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

Gracias por adelantado...

0
Deepesh 28 dic. 2016 a las 08:32

3 respuestas

La mejor respuesta

Podemos usar regmatches/regexpr de base R

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

Si es el último número para extraer

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

O

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

Datos

t <- c("abc_2.csv","pow_4.csv","foo_5.csv")
1
akrun 28 dic. 2016 a las 17:25

Solo extendiendo su solución:

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"
1
joel.wilson 28 dic. 2016 a las 11:53

Necesita stri_extract_last(...) de la biblioteca stringi.

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

stri_extract_last(t, regex = "(\\d+)")
2
TurtleIzzy 28 dic. 2016 a las 05:40