根据连续标准对字符向量进行排序

Flo*_*lli 1 r

我有一个包含不同元素的字符串向量:

vec = c("aaa.bbb0bbb0.fff110321.csv", "aaa.bbb0bbb015.fff120321.csv", 
        "aaa.bbb02bbb015.fff150321.csv","aaa.bbb02bbb015.fff130321.csv")
Run Code Online (Sandbox Code Playgroud)

我想根据第一个递增之后的数字,然后第二个递增bbb之后的数字,最后根据字符串末尾的日期之后的数字对这些元素进行排序。bbb

有解决方案吗?

Ron*_*hah 5

基础 R 选项 -

为了便于理解,我使用正则表达式在单独的列中提取了相关值,然后根据我们的偏好对数据进行排序。

res <- cbind(vec, strcapture("b+(\\d+)b+(\\d+).*?(\\d+)", vec, 
    proto = list(first = integer(), second = integer(), date = character()))) |>
  transform(date = as.Date(date, '%d%m%y')) 

res <- res[with(res, order(first, second, date)), ]
res

#                            vec first second       date
#1    aaa.bbb0bbb0.fff110321.csv     0      0 2021-03-11
#2  aaa.bbb0bbb015.fff120321.csv     0     15 2021-03-12
#4 aaa.bbb02bbb015.fff130321.csv     2     15 2021-03-13
#3 aaa.bbb02bbb015.fff150321.csv     2     15 2021-03-15
Run Code Online (Sandbox Code Playgroud)

tidyverse方法 -

library(tidyverse)

res <- tibble(vec) %>%
  extract(vec, c("first", "second", "date"), "b+(\\d+)b+(\\d+).*?(\\d+)", 
          remove = FALSE, convert = TRUE) %>%
  mutate(date = dmy(date)) %>%
  arrange(first, second, date)
Run Code Online (Sandbox Code Playgroud)

如果您对输出向量感兴趣,您可以从 获得它res$vec