2017-03-24 7 views
-1

rにデータセットをロードして、列の型をdatetimeに変更しようとしています。文字列を日時に変換する

strptimeas.POSIXctまたはas.Dateは異なる場合があります。

これは私のコードです:

a <- structure(list(DATE = c("01/01/2011 12:00:00", "01/02/2011 12:00:00", 
    "01/03/2011 12:00:00", "01/04/2011 12:00:00", "01/05/2011 12:00:00", 
    "01/06/2011 12:00:00"), VAL = c(65.34447917, 65.23983333, 65.03183333, 
    64.89107292, 64.83333333, 64.848625), id = c("VT1-1", "VT1-1", "VT1-1", 
    "VT1-1", "VT1-1", "VT1-1")), .Names = c("DATE", "VAL", "id"), row.names = c(NA, -6L), 
    class = c("tbl_df", "tbl", "data.frame")) 

b1 <- as.POSIXct(a$DATE, format = "%m/%d/%y %H:%M:%S") 
b2 <- strptime(a$DATE,"%m/%d/%Y %H:%M/%S") 

しかし、彼らはただNAを返します。これはおそらくタイプミスです。異なる日付/時刻形式を扱う際にこれを避ける方法はありますか?

+0

%m /%d /%y%H:%M /%S "'を最後にスラッシュを入れて使用しました。 %m /%d /%y%H:%M:%S "'にコロンをつけてください。しかし、私の答えを見てください。 –

答えて

2
R> library(anytime) 
R> anytime(a$DATE) 
[1] "2011-01-01 12:00:00 CST" "2011-01-02 12:00:00 CST" "2011-01-03 12:00:00 CST" 
[4] "2011-01-04 12:00:00 CST" "2011-01-05 12:00:00 CST" "2011-01-06 12:00:00 CST" 
R> 

いつでもパッケージは、これは簡単にするために建設された - あなたは間違っているかもしれません形式を指定する必要はありません、それは単にもっともらしいものの数をしようとします。 "合理的な"入力の場合、はちょうどで動作します。

+0

dmyの標準を不合理でないと考えていない限り、動作しないのではないかと恐れています。それはアメリカのmdyの標準のために正常に働くが、私は恐れているdmyがymdの後で二番目に頻繁に使用されることを恐れている。 ymdに問題はありません。それは2018年6月9日のように1桁の数字でも失敗し、末尾のゼロが必要です。ヒューリスティックに頼るのではなく、フォーマットを提供するほうがはるかに安全だと思います – Slav

+0

mm-dd-yyyyとdd-mm-yyyyを区別することができないのは、作者がそれを分類しないとエラーになります。易しい。したがって、ISO日付の優先度はyyyy-mm-ddです。それについてのドキュメントは明らかです。 –

+0

他の言葉で言えば、たとえあなたが言ったことと違ってそれを間違えるかもしれないとしても、あなたはフォーマットを供給する必要があります。それ以外の場合はエラーが発生しやすくなります。基本的なソリューションと1つのパッケージとほとんど変わりません。 – Slav

関連する問題