我有一个包含不同元素的字符串向量:
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
有解决方案吗?
基础 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。
| 归档时间: |
|
| 查看次数: |
36 次 |
| 最近记录: |