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



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

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

不希望在pharanthesis中有数字,希望有数字"/"分离。所以期望的输出是;

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

我尝试了gsub,但不知道如何去除pharanthesis中的数字。

Thanks in advance

使用字符串,查看周围的(?=-)含义:必须后跟一个破折号和应用:

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"

我们可以在这里使用单个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"

只使用gsub\--.*:删除--之后的所有内容:

gsub('\--.*', '', filenames)
[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"

最新更新