如何按R中的两个特定部分对文件名进行排序?

时间:2016-10-17 04:39:00

标签: r

我想按两个特定部分对文件名进行排序。文件名:

/xxx/abc_000_0222
/xxx/abc_000_0234
/xxx/abc_000_0134
/xxx/abc_002_0321
/xxx/abc_002_0012
/xxx/abc_001_0112
/xxx/abc_001_0341

我希望这样的正确顺序:

/xxx/abc_000_0134
/xxx/abc_000_0222
/xxx/abc_000_0234
/xxx/abc_001_0112
/xxx/abc_001_0341
/xxx/abc_002_0012
/xxx/abc_002_0321

我在mixedsort库中尝试了gtools函数,但无法获得正确的顺序:

df_filenames <- mixedsort(filenames)

有任何帮助吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

通过分隔符_将字符串拆分为df,然后通过第二个/第三个变量获取df的顺序并将其反馈给文件名。

x <- c("/xxx/abc_000_0222",
"/xxx/abc_000_0234",
"/xxx/abc_000_0134",
"/xxx/abc_002_0321",
"/xxx/abc_002_0012",
"/xxx/abc_001_0112",
"/xxx/abc_001_0341")

在您的情况下,x来自list.files()

x <- list.files("path/to/files") 
df <- as.data.frame(do.call(rbind,strsplit(x,"_")))
x[with(df, order(V2, V3))]

# /xxx/abc_000_0134
# /xxx/abc_000_0222
# /xxx/abc_000_0234
# /xxx/abc_001_0112
# /xxx/abc_001_0341
# /xxx/abc_002_0012
# /xxx/abc_002_0321

另外,请注意谨慎。我不记得是什么,但gtools库中有一些东西会导致与常用函数发生冲突,并可能导致意外结果。如果你看到奇怪的东西,请确保它没有附加。