2016-05-23 7 views
0

データフレームDFは、月の完全な英語名を使用する文字列としてMonthの列と、数値としてのYearという列を持ちます。R:データフレームを「年」と「月」の2つの列で並べ替え

Year Month {several xi}   
2016 April {numeric} 

xiのいくつかを時系列としてプロットする必要があります。このデータフレームを最も早い月(2015年1月)から現在まで並べ替える最も効率的な方法は何ですか? as.Dateを使用して「月」を日付クラスのオブジェクトに変換しようとする私の試みは、うまくいきません。彼らはアルファベット順にソートされて戻ってくる。

これはノーブの質問ですが、まあまあの悪運で謝罪私はRキャリアで非常に頻繁に日付クラスのオブジェクトで作業する必要はありませんでしたので、私が見ている様々な類似の質問私を助けることができます。

+2

'month.name'は月が正しい順序で組み込まれた定数です。正しい順序で要素を作成するには、単に 'df $ Month = factor(df $ Month、levels = month.name)'を実行します。それで 'df [order(df $ Year、df $ Month)]]を実行することができます。 – Gregor

+1

日にちは 'Date'にすることはできません。その日は' 1'を使うことができます。ほとんどの場合、 'zoo'パッケージの' yearmon'クラスを使うことができます(この質問のように)(http://stackoverflow.com/q/6242955/903061)、 '%B'を使う必要があります省略されていない月名があるので、 '%m'の代わりに。他の日付部分のワイルドカードについては '?strptime'を参照してください。 – Gregor

答えて

0

私はzooパッケージを使用するというGregorの提案に同意します。私は、日付を1つの変数に結合することをお勧めします。年または月のみの情報を抽出する必要がある場合は、lubridateパッケージを使用できます。次に、zooの使い方の簡単な例を示します。

library(zoo) 

#Toy Data Set 
d <- data.frame(Month = c("March", "April", "May", "March"), Year = c("2008", "1998", "1997", "1999"), stringsAsFactors = FALSE) 

#Generating Yearmon 
d$my <- as.yearmon(paste(d$Month, d$Year)) 

#Ordering the data 
d <- d[order(d$my), ] 

データフレーム内の月と年の変数が要因でないことを確認してください。それぞれ文字と数値/整数のクラスでなければなりません。

plotの代わりにggplotを使用する場合は、scale_x_yearmon()を使用する必要があります。

最後に、as.Dateで問題があったとお伝えします。グレゴールが指摘するように、これは、as.Dateが日、月、年を含む形式を想定しているためです。したがって、あなたの場合は、任意の日を挿入してas.Dateを使用することができます。たとえば、as.Date(paste(d$Month, 1, d$Year), "%B %d %Y")です。さまざまな日付形式の完全な一覧については、を参照してください。

+0

すべてのレスポンダーに感謝します。 'month.name'で順序付けし、' as.Date(paste(d $ Month、1、d $ Year)、 "%B%d%Y")を使うことは、魅力的に働きました。ファイルはかなり大きく、かなりの数のパッケージを既にインポートしているので、 'zoo'の使用は避けましたが、私はそれを念頭に置いています。 – mmyoung77

関連する問題