r - 对 R 中的文件名向量进行排序,因为 Windows 会对它们进行排序?
问题描述
我想对R中的文件名向量进行排序,就像Windows在按名称排序时对它们进行排序一样(右键单击->按->名称排序)。
假设我有四个 jpg 文件(我有更多)。Windows,当按名称排序时,按我在下面写的顺序对它们进行排序:
283_20200110_230606.jpg
500_20191203_032950.jpg
10889_20200114_165958.jpg
314368230_20200116_140854.jpg
R 使用时list.files()
,会像这样对它们进行排序:
"10889_20200114_165958.jpg" "283_20200110_230606.jpg" "314368230_20200116_140854.jpg" "500_20191203_032950.jpg"
似乎在 Rcharacter
中,数字 1 始终排在第一位,而 Windows 比较第一个下划线之前的数字。
有没有办法让它们以相同的方式排序?是像 Windows 那样在 R 中排序,还是像 R 那样在 Windows 中排序?
编辑:
测试数据:
v1 <- c("10889_20200114_165958.jpg", "283_20200110_230606.jpg", "314368230_20200116_140854.jpg", "500_20191203_032950.jpg")
解决方案
正则表达式将提取文件名向量中中断[0-9]{1,}
之前的任意数量的数字 0-9 。_
转换为数字,排序为您提供所需的顺序。
library(tidyverse)
f <- c("283_20200110_230606.jpg", "314368230_20200116_140854.jpg",
"500_20191203_032950.jpg", "10889_20200114_165958.jpg")
tibble(f) %>%
mutate(prefix = as.numeric(str_extract(f, "[0-9]{1,}"))) %>%
arrange(prefix) %>%
pull(f)
[1] "283_20200110_230606.jpg"
[2] "500_20191203_032950.jpg"
[3] "10889_20200114_165958.jpg"
[4] "314368230_20200116_140854.jpg"
推荐阅读
- python - 如何从 pandas DataFrame 中的地址列中提取英国邮政编码?
- kotlin - groupBy Kotlin 中的多个字段和总和值
- javascript - 如何在 vue2-datepicker 中设置默认时间?
- mysql - 2列外键
- python - 不向字典添加元素 - RPG 项目系统
- java - 即使在 GO 或 DONE 上设置了 maxLines=1 和 imeOptions,OnEditorActionListener 也无法正常工作
- ios - 在目标 c 父类中访问 swift 类
- android-studio - 包名/SHA1
- node.js - nodejs - 证书已过期
- mongodb - 如何在 Mongo 中合并列