2017-09-12 5 views
3

As_of_date_1,As_of_date_2などのカラムを持つデータフレームがあります。As_of_date_40です。私は列の番号の昇順に並べ替える必要がありますが、デフォルトでは列名を文字列として扱うようです(正しいので)As_of_date_1As_of_date_11As_of_date_12 ...など、次にAs_of_date_2シリーズなど。どのようにこれを行うのですか?接尾辞を持つカラム名を指定する

+1

'as.numeric(GSUB( "\\ D +"、 ""、 "As_of_date_40")) 'あなたに番号をつけ、それに従ってソートします –

答えて

2

あなたはgtoolsパッケージからmixedorderを使用することができます。

library(gtools) 

colnames = paste("As_of_date_", 1:20, sep = "") 
colnames = sort(colnames) # Wrong order 
# [1] "As_of_date_1" "As_of_date_10" "As_of_date_11" "As_of_date_12" "As_of_date_13" 
# [6] "As_of_date_14" "As_of_date_15" "As_of_date_16" "As_of_date_17" "As_of_date_18" 
# [11] "As_of_date_19" "As_of_date_2" "As_of_date_20" "As_of_date_3" "As_of_date_4" 
# [16] "As_of_date_5" "As_of_date_6" "As_of_date_7" "As_of_date_8" "As_of_date_9" 

df = as.data.frame(matrix(sample(1:5, 10*20, replace = TRUE), nrow = 10, ncol = 20)) 
names(df) = colnames 

df[, mixedorder(names(df))] 

結果:

As_of_date_1 As_of_date_2 As_of_date_3 As_of_date_4 As_of_date_5 As_of_date_6 As_of_date_7 
1   3   3   5   8   3   3   5 
2   8   2   9   7   4   7   10 
3   5   8   9   8   7   5   9 
4   9   9   8   1   4   8   9 
5   10   4   5   5   2   2   2 
    As_of_date_8 As_of_date_9 As_of_date_10 As_of_date_11 As_of_date_12 As_of_date_13 
1   2   2    1   10    9    9 
2   7   8    6    5    3    7 
3   4   1    9    7    1    7 
4   7   5    6    6    4   10 
5   4   6    5    2   10    7 
    As_of_date_14 As_of_date_15 As_of_date_16 As_of_date_17 As_of_date_18 As_of_date_19 
1    8   10    5    2    2    1 
2    6   10    8    5    3    5 
3    6    7    3    5    5    8 
4    3    8    4    4    3    2 
5    2    1    3    2    9    6 
    As_of_date_20 
1    7 
2    1 
3    4 
4    3 
5    9 
関連する問題