2016-03-24 11 views
-2

DFの列の対応する名前に従って、データフレーム(DF)の行を並べ替える必要があります。 マイDFこのデータフレームの列を列の名前に従って注文する

beta se  hr m 
0.1  0.01  1  xl.vl.pl 
0.2  0.02  2  l.vl.ce 
0.3  0.03  3  s.vl.fc 
0.4  0.04  4  idl.p 
0.1  0.01  1  m.vl.pl 
0.2  0.02  2  xs.vl.ce 
0.3  0.03  3  l.vl.fc 
0.4  0.04  4  idl.p 
0.4  0.04  4  xxl.vl.pl 

のように見え、私は任意のヘルプや提案を感謝し、それは

0.4  0.04  4  xxl.vl.pl 
0.1  0.01  1  xl.vl.pl 
0.2  0.02  2  l.vl.ce 
0.3  0.03  3  l.vl.fc 
0.1  0.01  1  m.vl.pl 
0.4  0.04  4  idl.p 
0.4  0.04  4  idl.p 
0.3  0.03  3  s.vl.fc 
0.2  0.02  2  xs.vl.ce 

になるように、列mに応じて、それを並べ替えるしたいと思います。

+1

'ライブラリ(fortunes); – Cath

+1

出力は列mによって順序付けされているように見えませんでした。 – adaien

+0

ありがとうございました。ありがとうございました。ありがとうございました。 'fortune(14)'を説明してください。 – user6108949

答えて

0
orderLevels<-c("xxl","xl","l","m","idl","s","xs") 

library(dplyr) 
DF<-DF %>% mutate(m2 = match(sapply(strsplit(DF$m, "[.]"), function(x) x[1]), orderLevels)) %>% arrange(m2) %>% select(-m2) 
+0

'DF [order(match(sub)]([^。] +)\\ .. +"、 "\\ 1"、DF $ m)、orderLevels)) ]、 ';' 'あなたの' 'strsplit()' 'を保持するために、' DF [order(サフィ(strsplit(DF $ m、 "[。]"、function(x)x [1])、orderLevels) '文 – Cath

+1

はい、間違いなくもっと簡潔です。 – adaien

5

あなたはあなたの意志に従って順序付けメートルの最初の部分に対応する注文因子(あなたがsubを呼び出して取得できること)、(xxl, xl, l, m, idl ,s, xs)を使用することができ、その後、あなたが使用してdata.frameを注文することができますそれ:

DF[order(factor(sub("([^.]+)\\..+", "\\1", DF$m), 
    levels=c("xxl", "xl", "l", "m", "idl" ,"s", "xs"), ordered=TRUE)), ] 

# beta se hr   m 
# 9 0.4 0.04 4 xxl.vl.pl 
# 1 0.1 0.01 1 xl.vl.pl 
# 2 0.2 0.02 2 l.vl.ce 
# 7 0.3 0.03 3 l.vl.fc 
# 5 0.1 0.01 1 m.vl.pl 
# 4 0.4 0.04 4  idl.p 
# 8 0.4 0.04 4  idl.p 
# 3 0.3 0.03 3 s.vl.fc 
# 6 0.2 0.02 2 xs.vl.ce 
+0

ありがとうございます。 – user6108949

関連する問題