私は比較的Rに慣れていませんが、日付の変換を処理する必要があるのはこれが初めてです。 (read.table()を使用して)CSVからデータを読み取りましたが、問題を強調するためにデータを短縮しました。 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
ご覧のとおり、一部の日付の年は不正確です。このパターンは、日が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
のオブジェクトを自動的に返し、因子または文字のいずれかで動作します。