2016-10-17 4 views
0

Ich möchte Dateinamen durch zwei spezifische Teile sortieren. Dateinamen:Wie sortiert man Dateinamen nach zwei bestimmten Teilen in 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 

Die richtige Reihenfolge ich so erhalten möchten:

/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 

ich die mixedsort Funktion in gtools Bibliothek versucht haben, konnte aber nicht die richtige Reihenfolge bringen:

df_filenames <- mixedsort(filenames) 

Irgendwelche Hilfe? Vielen Dank im Voraus!

Antwort

0

Teilen Sie die Zeichenketten in ein df durch das Trennzeichen _, dann Reihenfolge von df durch zweite/dritte Variablen und füttern Sie es zurück zu Dateinamen.

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 

Auch zur Vorsicht:

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") 

In Ihrem Fall x würde von list.files() sein. Ich kann mich nicht erinnern, was, aber es gibt etwas in der gtools-Bibliothek, die einige Kollisionen mit häufig verwendeten Funktionen verursacht und zu unerwarteten Ergebnissen führen kann. Wenn Sie etwas seltsames sehen, stellen Sie sicher, dass es nicht angebracht ist.

Verwandte Themen