我有一个要打开的文件名列表。格式如下。
'xxxxx_xxxxxx 00.02.xls'
第一个00表示年份,第二个02表示月份。
无论如何,首先使用年度索引对该列表进行排序,而不是月份索引。
答案 0 :(得分:3)
如果在两年数字之前总是有13个字符,那么你可以这样做(假设你的文件名向量被称为x
):
x[order(substr(x,14,18))]
答案 1 :(得分:2)
如果文件名中的字符数量可能会发生变化,则正则表达式可能会为您找到年份和月份。我喜欢str_match
包中的stringr
。
library(stringr)
extract <- str_match(vec, "([0-9]{2})\\.([0-9]{2}).xls")
vec[order(rank(extract[,2]))]
这样,如果您决定有一天按月订购,则可以将最后一行从2
更改为3
。
如果您希望年份下降,请向其添加rev
。像这样,vec[rev(order(rank(extract[,2])))]
关于str_match
的好处是,它告诉你它匹配的内容,并为你放入parantheses中的标记创建列。然后,您可以像其他任何数据框一样对这些列进行子集化。
extract
[,1] [,2] [,3]
[1,] "07.02.xls" "07" "02"
[2,] "15.12.xls" "15" "12"
[3,] "01.02.xls" "01" "02"
vec <- c("xxxxxxxx_xxxxxx 07.02.xls", "xxxxx_xxx 15.12.xls", "xxxxx_xxxxxx 01.02.xls")
extract <- str_match(vec, "([0-9]{2})\\.([0-9]{2}).xls")
vec[order(rank(extract[,2]))]
[1] "xxxxx_xxxxxx 01.02.xls" "xxxxxxxx_xxxxxx 07.02.xls" "xxxxx_xxx 15.12.xls"
#or reversed
vec[rev(order(rank(extract[,2])))]
[1] "xxxxx_xxx 15.12.xls" "xxxxxxxx_xxxxxx 07.02.xls" "xxxxx_xxxxxx 01.02.xls"