[[dplyr]] の `mutate()` と [[lubridate]] の `make_datetime()` を組み合わせることで、年・月・日・時・分・秒の個々の数値要素から日時オブジェクトを効率的に作成できる。 この手法は、[[Base R]] の `ISOdatetime()` の高速な代替手段として設計されており、データフレーム内の複数の列から日時を組み立てる際に特に有用である。 ```r flights |> mutate( flight_date = make_datetime(year, month, day, hour, minute), .keep = "used" ) ``` ``` # A tibble: 336,776 × 6 year month day hour minute flight_date <int> <int> <int> <dbl> <dbl> <dttm> 1 2013 1 1 5 15 2013-01-01 05:15:00 2 2013 1 1 5 29 2013-01-01 05:29:00 3 2013 1 1 5 40 2013-01-01 05:40:00 4 2013 1 1 5 45 2013-01-01 05:45:00 5 2013 1 1 6 0 2013-01-01 06:00:00 6 2013 1 1 5 58 2013-01-01 05:58:00 7 2013 1 1 6 0 2013-01-01 06:00:00 8 2013 1 1 6 0 2013-01-01 06:00:00 9 2013 1 1 6 0 2013-01-01 06:00:00 10 2013 1 1 6 0 2013-01-01 06:00:00 # ℹ 336,766 more rows # ℹ Use `print(n = ...)` to see more rows ``` ## タイムゾーンを指定して日時列を作成する `tz` 引数でタイムゾーンを指定できる。デフォルトは UTC である。 ```r flights |> mutate( flight_date = make_datetime(year, month, day, hour, minute, tz = "Asia/Tokyo"), time_zone = tz(flight_date), .keep = "used" ) ``` ``` # A tibble: 336,776 × 7 year month day hour minute flight_date time_zone <int> <int> <int> <dbl> <dbl> <dttm> <chr> 1 2013 1 1 5 15 2013-01-01 05:15:00 Asia/Tokyo 2 2013 1 1 5 29 2013-01-01 05:29:00 Asia/Tokyo 3 2013 1 1 5 40 2013-01-01 05:40:00 Asia/Tokyo 4 2013 1 1 5 45 2013-01-01 05:45:00 Asia/Tokyo 5 2013 1 1 6 0 2013-01-01 06:00:00 Asia/Tokyo 6 2013 1 1 5 58 2013-01-01 05:58:00 Asia/Tokyo 7 2013 1 1 6 0 2013-01-01 06:00:00 Asia/Tokyo 8 2013 1 1 6 0 2013-01-01 06:00:00 Asia/Tokyo 9 2013 1 1 6 0 2013-01-01 06:00:00 Asia/Tokyo 10 2013 1 1 6 0 2013-01-01 06:00:00 Asia/Tokyo # ℹ 336,766 more rows # ℹ Use `print(n = ...)` to see more rows ``` ## 関連ノート - **[深掘り]** [[lubridate と Base R では日時のデフォルトタイムゾーンが異なる]]: 本ノートで触れた「`tz` のデフォルトは UTC」という挙動を Base R との対比で詳しく扱う - **[対比]** [[dplyr の mutate() と lubridate の make_date() で日付列を作成する]]: 本ノートの日時版と対になる姉妹関数 - **[派生]** [[dplyr の mutate() で関与または作成された列のみを保持する]]: 日時作成に使った複数の数値列だけを残すときに併用する - **[派生]** [[dplyr の mutate() で作成した列は、同一の mutate() 内で即座に利用できる]]: 日時列を起点にタイムゾーン列を追加するなど、連鎖的な列作成で使える