如何提取R中字符向量的特定部分?

how to extract specific part of character vector in R?

我有这样的文件名作为字符向量;

filenames <- c('1194-1220-1479-891--(133.07).RDS','1194-1221-1421-891--(101.51).RDS')

不想在括号中使用数字,并且希望用“/”分隔数字。 所以期望的输出是;

filenames_desired <- c('1194/1220/1479/891','1194/1221/1421/891')

我试过 gsub 但不知道如何删除括号中的数字。

提前致谢

我们可以在这里使用一个 sub() 调用:

filenames <- c("1194-1220-1479-891--(133.07).RDS",
               "1194-1221-1421-891--(101.51).RDS")

output <- sub("(\d+)-(\d+)-(\d+)-(\d+).*", "\1/\2/\3/\4", filenames)
output

[1] "1194/1220/1479/891" "1194/1221/1421/891"

使用 stringr,环顾四周 (?=-) 意思:后面必须跟一个破折号并应用:

filenames <- c('1194-1220-1479-891--(133.07).RDS','1194-1221-1421-891--(101.51).RDS')

sapply(stringr::str_extract_all(filenames, "\d+(?=-)"), 
       paste0, 
       collapse = "/") 

[1] "1194/1220/1479/891" "1194/1221/1421/891"

据我所知,您名字的前18个字符是您最终名字的基础;所以,你可以使用下面的代码

# Initial names
  filenames <- ('1194-1220-1479-891--(133.07).RDS','1194-1221-1421-891--(101.51).RDS')

# Extract the first 18 elements of "filenames"
  nam <- substr(filenames, 1, 18)
# Replace "-" by "/"
  final.names <- str_replace_all(nam, "-", "/")

您可以使用 strsplit 从每个列表中提取第一个元素,然后使用 gsub:

gsub('-', '/', sapply(strsplit(filenames, '--'), `[[`, 1))

这将产生

#"1194/1220/1479/891" "1194/1221/1421/891"

只需将 gsub\--.* 一起使用:删除 -- 之后的所有内容,包括 --:

gsub('\--.*', '', filenames)

[1] "1194-1220-1479-891" "1194-1221-1421-891"