日付形式が混在する変数を 1 つの形式に変換するにはどうすればよいでしょうか? 質問する

日付形式が混在する変数を 1 つの形式に変換するにはどうすればよいでしょうか? 質問する

私のデータフレームのサンプル:

                date
1   25 February 1987
2     20 August 1974
3     9 October 1984
4     18 August 1992
5  19 September 1995
6          16-Oct-63
7          30-Sep-65
8        22 Jan 2008
9         13-11-1961
10    18 August 1987
11         15-Sep-70
12    5 October 1994
13   5 December 1984
14          03/23/87
15    30 August 1988
16        26-10-1993
17    22 August 1989
18         13-Sep-97

日付の形式が複数ある日付変数を含む大きなデータフレームがあります。変数の形式のほとんどは上記に示されていますが、他にも非常にまれな形式がいくつかあります。複数の形式があるのは、それぞれ異なる形式を使用するさまざまな Web サイトからデータがまとめられたためです。

私は単純な変換を試みた。例えば

strftime(mydf$date,"%d/%m/%Y")

しかし、複数の形式がある場合、このような変換は機能しません。複数の gsub タイプの編集に頼りたくありません。もっと簡単な解決策を見逃しているのではないかと思いました。

コード例:

    structure(list(date = structure(c(12L, 8L, 18L, 6L, 7L, 4L, 14L, 
10L, 1L, 5L, 3L, 17L, 16L, 11L, 15L, 13L, 9L, 2L), .Label = c("13-11-1961", 
"13-Sep-97", "15-Sep-70", "16-Oct-63", "18 August 1987", "18 August 1992", 
"19 September 1995", "20 August 1974", "22 August 1989", "22 Jan 2008", 
"03/23/87", "25 February 1987", "26-10-1993", "30-Sep-65", "30 August 1988", 
"5 December 1984", "5 October 1994", "9 October 1984"), class = "factor")), .Names = "date", row.names = c(NA, 
-18L), class = "data.frame")

ベストアンサー1

引数を使用して、「ユーザーが複数のフォーマット順序を指定して、異種の日付/時刻文字表現を処理できるようにする」parse_date_timeパッケージを試すことができます。次のようなものです...lubridateorders

library(lubridate)
parse_date_time(x = df$date,
                orders = c("d m y", "d B Y", "m/d/y"),
                locale = "eng")

...ほとんどのフォーマットに対応できるはずです。b/Bフォーマットはlocale機密です

使用できるその他の日付と時刻の形式はorders詳細のセクション?strptime

おすすめ記事