2016-10-16 6 views
-1

データ列を係数から日付形式に変換しようとしていますが、何らかの問題が常に表示されます。日付の係数をas.dateで変換するR

$ Date: Factor w/ 729 levels "1/01/2007","1/01/2008",..: 189 189 189 189 189 189 189 189 189 189 ... 
  1. かなり理解していないもの、これらすべて:

    head(PowerConsumption) 
    

    それはそれを示して、その最初の6行で

    date 
    1/01/2008 
    1/01/2008 
    1/01/2008 
    1/01/2008 
    1/01/2008 
    

    ルック:元の日付欄には、以下のようなものです189?

  2. これは、因子を日付型に変更することを意味していました。

    date <- as.Date(PowerConsumption$Date, format = "%d%m%Y") 
    

    すべての値がNAになる:このコードを適用した後

。誰でも間違っていることを指摘できますか?

+1

最初に文字ベクトルに変換する必要があります。 'as.character'に' PowerConsumption $ Date'をラップしようとしています: 'as.Date(as.character(PowerConsumption $ Date)、format ="%d%m%Y ")' – h3rm4n

+1

これは 'date < "strDates < - c(" 01/05/1965 "、" 16/08/1975 ") 日付< - as(PowerConsumption $ Date、format ="%d /%m%/ Y " .Date(strDates、 "%d /%m /%Y") ' – Keniajin

+0

これを避けるために、元の' PowerConsumption'データフレームを 'stringsAsFactors = FALSE'パラメータで読み書きします。 – hrbrmstr

答えて

3

まず、189のすべては、そのファクタ変数の189番目のレベルの値で始まることを意味します。簡単な例:

> x <- factor(c("1/01/2007","1/01/2008","1/01/2007","1/01/2008")) 
> str(x) 
Factor w/ 2 levels "1/01/2007","1/01/2008": 1 2 1 2 

第二に、あなたは日付フォーマットにその日付変数を変換したい場合、あなたは元の変数の正しい形式(フォーマットパラメータを指定するときは、/を省略)を指定する必要があります。

> as.Date(x, format="%d/%m/%Y") 
[1] "2007-01-01" "2008-01-01" "2007-01-01" "2008-01-01" 

このような要因変数は、必ずしもas.characterで文字に変換する必要はありません。


新しいanytimeパッケージからanydate機能を使用している日付に係数値をcenvertする別のオプション:もちろん、

> library(anytime) 
> anydate(x) 
[1] "2007-01-01" "2008-01-01" "2007-01-01" "2008-01-01" 
+0

あなたのコメントh2rm4nに感謝します。しかし、なぜ189で始まるのか分かりません。私はこの列にNAsを持っていません... – Sunshine

+0

@Sunshineこれは、最初の日付がすべて同じで、 '2008-01-01'より前の188の日付があるからです。アイデアを得るには、 'as.integer(PowerConsumption $ Date)'の出力を確認してください。 – h3rm4n

+0

@Sunshineまた、 'anytime'パッケージで代替案を追加しました。 – h3rm4n

0

あり、lubridateソリューション:

x <- factor(c("1/01/2007","1/01/2008","1/01/2007","1/01/2008")) 

dmy(x) 
#[1] "2007-01-01" "2008-01-01" "2007-01-01" "2008-01-01" 
+0

これは非常に簡単に見えます!それも試してみる。ありがとう! – Sunshine

関連する問題