日付けを意味する文字列を簡単にPOSIXct classへ変換するパッケージの紹介です。年月日の区切る「ハイフン」「ピリオド」「アンダーバー」などの文字がなくとも年の文字数を設定することで対応が可能です。
パッケージバージョンは1.1-0。実行コマンドはwindows 11のR version 4.1.3で確認しています。
パッケージのインストール
下記、コマンドを実行してください。
#パッケージのインストール
install.packages("fasttime")
実行コマンド
詳細はコメント、パッケージのヘルプを確認してください。
#パッケージの読み込み
library("fasttime")
###データ例の作成#####
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
install.packages("tidyverse");require("tidyverse")
}
TimeChr <- tibble(TimeData = c("2022-03-17 09:35", "22/03/17, the time is 9:35",
"2022-03-17T09:35:45Z", "22_03_17_09_15",
"2203171015"))
#確認
TimeChr
# A tibble: 4 x 1
# TimeData
# <chr>
#1 2022-03-17 09:35
#2 22/03/17, the time is 9:35
#3 2022-03-17T09:35:45Z
#4 22_03_17_09_15
#5 2203171015
########
#文字列をPOSIXct classへ変換:fastPOSIXctコマンド
#タイムゾーンを指定:tzオプション
#年を示す文字数を指定:fixedオプション;文字区切りがある場合はNAを設定
##データ例では「fixedオプション」を指定しないと最後尾はNA
TimeChr %>%
mutate(Time_POSIXct = fastPOSIXct(TimeData, tz = "GMT"))
# A tibble: 4 x 2
# TimeData Time_POSIXct
# <chr> <dttm>
#1 2022-03-17 09:35 2022-03-17 18:35:00
#2 22/03/17, the time is 9:35 2022-03-17 18:35:00
#3 2022-03-17T09:35:45Z 2022-03-17 18:35:45
#4 22_03_17_09_15 2022-03-17 09:15:00
#5 2203171015 NA
#fixedオプションを追加する
TimeChr %>%
mutate(Time_POSIXct = fastPOSIXct(TimeData, tz = "GMT")) %>%
mutate(Time_POSIXct2 = if_else(is.na(Time_POSIXct),
fastPOSIXct(TimeData, tz = "GMT", fixed = 2),
Time_POSIXct))
# A tibble: 5 x 3
# TimeData Time_POSIXct Time_POSIXct2
# <chr> <dttm> <dttm>
#1 2022-03-17 09:35 2022-03-17 09:35:00 2022-03-17 09:35:00
#2 22/03/17, the time is 9:35 2022-03-17 09:35:00 2022-03-17 09:35:00
#3 2022-03-17T09:35:45Z 2022-03-17 09:35:45 2022-03-17 09:35:45
#4 22_03_17_09_15 2022-03-17 09:15:00 2022-03-17 09:15:00
#5 2203171015 NA 2022-03-17 10:15:00
少しでも、あなたの解析が楽になりますように!!