質問
Rは比較的新しいですが、日付変換に対処しなければならなかったのはこれが初めてです。 CSV(read.table()を使用して)からデータを読みましたが、問題を短くして問題を強調しました。 Rを読むと、日付フィールドは文字です。
簡単に言えば、私の日付のほとんどは、いくつかのインスタンスを除き、正しく強制されます。以下の例では、何が起こっているのかを示すことを願っています。
# my attempt to coerce the date -- uses the stringr package
prods.all$Date2 <- as.Date(str_sub(prods.all$Date, 1,
str_locate(prods.all$Date, " ")[1]-1),
"%m/%d/%Y")
# grab two rows to highlight my issue
temp <- prods.all[c(1925:1926), c(1,8)]
> temp
Date Date2
1925 10/9/2009 0:00:00 2009-10-09
1926 10/15/2009 0:00:00 0200-10-15
ご覧のとおり、日付の一部は不正確です。パターンは、1日が2桁の場合に発生するようです。
私はいくつかの本を調べて、より良い方法でグーグルで検索しようとしましたが、すべてが私のデータが入力で正しくフォーマットされていないことを示唆しているようです。
Rがどれほど強力かを考えると、私のコラムに有効な日付を強制する非常に簡単な方法があり、非常に明白な解決策を見落としていると思います。
提供できるヘルプは大歓迎です。
解決
あなたは物事を過度に複雑にしているかもしれません、あなたがstringrパッケージを必要とする理由はありますか?
df <- data.frame(Date = c("10/9/2009 0:00:00", "10/15/2009 0:00:00"))
as.Date(df$Date, "%m/%d/%Y %H:%M:%S")
[1] "2009-10-09" "2009-10-15"
より一般的には、時間コンポーネントも必要な場合は、Strptimeを使用してください。
strptime(df$Date, "%m/%d/%Y %H:%M:%S")
あなたの実際のデータがあなたが与えた部分的な結果から何を見るかもしれないかを推測しています。
他のヒント
最も簡単な方法は、潤滑剤を使用することです。
library(lubridate)
prods.all$Date2 <- mdy(prods.all$Date2)
この関数は、クラスのオブジェクトを自動的に返します POSIXct
要因または文字のいずれかで動作します。
library(lubridate)
あなたの日付形式がこの'04/24/2017 05:35:00 'のようなものである場合、以下のように変更しますprods.all$Date2<-gsub("/","-",prods.all$Date2)
次に、日付形式を変更しますparse_date_time(prods.all$Date2, orders="mdy hms")