2023/11/28(火)に開催したExploratory Hourの録画です。
時分秒の値が入っている文字列型の列を時刻型に変換する方法を紹介しています。
出退勤データや業務時間のデータを分析している方、時刻データを扱う業務に携わっている方
時刻の情報が数値型(例:72903 = 7時29分3秒)で保存されている場合、時間単位での計算や時刻の平均値の算出が困難なため、時刻(hms)型に変換する必要があります。
さらに時刻の情報が数値型が保存されている場合、10時以降(例:103203 = 10時32分3秒) は6桁になりますが、10時より前(例:72903 = 7時29分3秒)の場合、桁数が5桁になるため、事前に桁数を統一する必要があります。
str_pad
関数を使用して桁数を統一した後、文字列を時、分、秒に分割し、時刻型に変換することが可能です。
今回は1行が1つの出退勤記録を表し、列には出勤時間の情報を列持つデータを利用します。
まずは全ての時刻データを6桁に統一します。出勤時間の列ヘッダーメニューから「計算を作成」の「標準」を選択します。
計算エディターが開いたら、str_pad
関数を使用して以下の内容を入力し実行します。
str_pad(出勤時間, pad=0, width=6, side="left")
str_pad関数は文字列のパディング処理を行い、引数pad
は埋め込む文字を、
width
は最終的な文字列の長さを、
side
は、パディングを行う側(“left”または”right”)を指定することができるので、
今回の処理は、6桁の数字になるように左側から0を追加する処理をします。
これで出勤時間を6桁に統一できました。
続いて、統一された6桁のデータから時、分、秒を別々に抽出します。
出勤時間の列ヘッダーメニューから「テキストデータの加工」、「抽出する」、「指定した範囲の文字列」を選択します。
テキストデータの加工ダイアログが開いたら、開始に「1」、末尾に「2」を選択し、新しく列を作成にチェックを付けたら、列名を「時」に設定して実行します。
同じ要領で「分」の情報も抽出します。出勤時間の列ヘッダーメニューから「テキストデータの加工」、「抽出する」、「指定した範囲の文字列」を選択します。
テキストデータの加工ダイアログが開いたら、開始に「3」、末尾に「4」を選択し、新しく列を作成にチェックを付けたら、列名を「分」に設定して実行します。
最後に「秒」の情報も抽出します。出勤時間の列ヘッダーメニューから「テキストデータの加工」、「抽出する」、「指定した範囲の文字列」を選択します。
テキストデータの加工ダイアログが開いたら、開始に「5」、末尾に「6」を選択し、新しく列を作成にチェックを付けたら、列名を「秒」に設定して実行します。
これで時、分、秒の情報を抽出できました。
続いて、抽出した時分秒を時刻形式で結合します。
Shiftキーを押しながら「時」「分」「秒」の列を選択し、列のメニューから「複数の列を繋げる(UNITE)」を選択します。
以下の設定を行います区切り文字に「:(コロン)」を設定し、元の列を消すを「TRUE」に、列名を「出勤時間」に設定して実行します。
これでhms(時間)型に変換するための文字列を生成できました。
最後に時刻型への変換を行います。
「出勤時間」の列ヘッダーメニューから「データタイプを変換」、「hms(時間)型に変換」を選択します。
すると、計算を作成のダイアログが開き、計算エディタにparse_time(as.character(出勤時間))
と入力されていることを確認したら、そのまま実行します。なお、parse_time
関数は文字列をhms型に変換してくれる関数です。
「出勤時間」の列をhms型に変換できました。