如何提取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"
我有这样的文件名作为字符向量;
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"