2016-10-17 8 views
0

ファイル名を2つの特定の部分でソートしたいと思います。ファイル名:Rの2つの特定の部分でファイル名をソートする方法は?

/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 

私はgtoolsライブラリ内mixedsort機能を試してみましたが、正しい順序を取得できませんでした:

df_filenames <- mixedsort(filenames) 

助けが必要ですか?前もって感謝します!

答えて

0

セパレータ_で文字列をdfに分割し、2番目または3番目の変数で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") 

xlist.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にあります。あなたが何か奇妙なものが見えたら、それが付いていないことを確認してください。

関連する問題