1. ホーム
  2. r

[解決済み] Rで文字YYYY-MM-00を日付YYYY-MMに変換する。

2022-02-11 07:08:31

質問

ExcelのデータをRにインポートしたのですが、日付の変換に問題があります。 Rでは、私のデータは文字で、次のようになります。

日付<-c('1971-02-00 00:00:00', '1979-06-00 00:00:00')。

文字を日付(MM/YYYY)に変換したいのですが、日にちとして使われる'00'の値が問題で、'NA'が体系的に返されます。 手動で'00'を'01'に置き換えて、as.yearmon, ymd, formatを使用するとうまくいくのです。しかし、私は変更する日付がたくさんあり、Rですべての'00'を'01'に変更する方法がわかりません。


# data exemple
date1<-c('1971-02-00 00:00:00', '1979-06-00 00:00:00')

# removing time -> doesn't work because of the '00' day
date1c<-format(strptime(date1, format = "%Y-%m-%d"), "%Y/%m/%d")
date1c<-format(strptime(date1, format = '%Y-%m'), '%Y/%m')

# trying to convert character into date -> doesn't work either
date1c<-ymd(date1)
date1c<-strptime(date1, format = "%Y-%m-%d %H:%M:%S")
date1c<-as.Date(date1, format="%Y-%m-%d %H:%M:%S")
date1c<as.yearmon(date1, format='%Y%m')

# everything works if days are '01'
date2<-c('1971-02-01 00:00:00', '1979-06-01 00:00:00')
date2c<-as.yearmon(ymd(format(strptime(date2, format = "%Y-%m-%d"), "%Y/%m/%d")))
date2c

もし、この問題を解決するためのアイデアや、別のアイデアがあれば、感謝します。

どのように解決するのですか?

もう一つの可能性として考えられるのは

as.Date(paste0(substr(date1, 1, 9), "1"), format = "%Y-%m-%d")

[1] "1971-02-01" "1979-06-01"

ここでは、最初の9文字を抽出し、それを 1 で、それを日付オブジェクトに変換しています。