2016-06-30 7 views
0

これは本当に簡単だと思いますが、これを行う方法が見つかりません。文字列に基づくデータフレーム

要因に基づいてデータフレームを並べ替える必要があります。私がこれまでに見つけた答えはすべて論理的な並べ替えを提供しますが、これは任意であり、数字と文字が混在しています。 factorではなく、vectorであることが問題なのでしょうか?しかし、ベクターに対する答えのどれもうまくいかないようです。

本当にありがとうございます。

例データ (注:このデータは実際のコードでは、データフレームは他の計算の出力ですので、名前を変更することはできません)

DATA<- data.frame(This=c("120", "60", "90", "OG"), That=c(453, 679,12,252)) 

DATA 

    This That 
1 120 453 
2 60 679 
3 90 12 
4 OG 252 

私は順序60でそれをソートしたい - OG、すなわち

This That 
1 60 679 
2 90 12 
3 120 453 
4 OG 252 

編集 - 120から90:これが重複問題ではありません。上で説明したように、また以下のコメントでは、ソーティングは任意です。語彙的ソートでは、行の名前が相互に関連していると想定されますが、ここでは該当しません。私は、行("unicorn", "18.1", "TREES", "234234235")を標識し、次のようにあなたがfactor変数との順序を調整することができます("234234235", "unicorn", "TREES", "18.1")

+0

重要ですか?またはアルファベット順にソートしたいのですか?つまり、 'OG'と' AB'がある場合は 'AB、OG'をしますか? – Psidom

+0

こんにちは@ user2100721、ありがとう、他の答えは私が探していたものではありませんでした。順序付けは辞書順ではなく任意であった。このケースでは、ラベルを変更できないために複雑でした。 – EcologyTom

答えて

0

ために、それらを望んでいたことができた:

:これはラベルの値を変更しないことを

DATA$This <- factor(DATA$This, levels=c("60", "90", "120", "OG")) 

注意

DATA 
    This That 
1 120 453 
2 60 679 
3 90 12 
4 OG 252 

しかし、あなたが望んでいたとして、あなたがデータを注文することができるように、それは、これらのラベルにマッピングされている基礎となる整数を変更します。

DATA[order(DATA$This),] 
    This That 
2 60 679 
3 90 12 
1 120 453 
4 OG 252 
+0

ありがとう@lmo、これはまさに私が探していたものでした。私はそれが2段階のプロセスであることを認識していませんでした。最初の段階が期待通りに変更されなかったので、私は落胆しました。 – EcologyTom

0

ここでは、混合型の列をソートするオプションがあります。ここで列を最初に数値に変換し、並べ替えを行うと、数値が常に文字値の前にあり、自然順番になり、文字の値はアルファベット順になっていることを確認、This列と仮定すると、すでにクラスcharacterであります種類:文字の順番が

library(dplyr) 
DATA %>% arrange(as.numeric(This), as.character(This)) 
# This That 
# 1 60 679 
# 2 90 12 
# 3 120 453 
# 4 OG 252 
+0

ありがとう@Psidom。現時点では、私はまだdplyrの周りに少し不確実です、それが私が他の答えを選んだ理由です。しかし、私はそれが別の状況で本当に役立つことがわかります。 – EcologyTom

関連する問題