Excelの時間データをインポートする方法

例えば、下記のようにExcelで時間のみのデータがあったとします。

Excelの時間を含むデータをインポートすると、下記のようにPOSIXct型(日付時間型)のデータとしてインポートされます。

Excelでの元の値は「74:23:12」でしたが、Exploratoryでインポートした日付時間型の列の値を見ると「1900-01-03 02:23:12」になっています。

この問題の原因としては、Excelは時間型のデータを裏でその時間を日数にした数値(例:3.0994)として持っています。これを確認するためには、Excelのセルの書式設定を変更することで、時間を日数として表していることが確認できます。

Exploratoryで時間のデータをインポートした時には、Excelでの日付時間データの基準値である「1900-01-01 00:00:00」から経過した日数である「3.0994」を足すために「1900-01-03 02:23:12」となってしまいます。

そこで、このノートでは時間型のデータをExploratoryで扱うための方法を2つご紹介します。

時、分、秒の「時」のみにしたい場合

例えば、時間のデータで「74:23:12」となっていて「時」である「74」時間のみを使いたいとします。

その場合は、Excelのデータをインポートする際に表示されるインポートダイアログにて、時間の列のデータタイプを「Numeric(数値)」を指定します。

その後に、「適用ボタン」を押してから「保存」ボタンを実行します。

すると、時間のデータを日数にした数値(例:3.0994)としてインポートすることができました。

日数に対して「24時間」をかけることで、元々の値の「時」のデータに変換することができます。

列ヘッダメニューから「計算を作成(Mutate)」を選択します。

計算式には下記のように指定して実行します。

<時間型の列名> * 24

これにより、「日数」を表す数値(例:3.0994)から「時」を表す数値(74.386)に変換することができています。

計算した結果には小数点(分や秒を時間に直した値)が含まれているので、小数点を切り捨てたい場合には、列ヘッダメニューから「数値関数を使う」の「切り捨て(floor)」を選択します。

計算を作成のダイアログが表示されるため、そのまま実行します。

これにより、小数点以下を切り捨てて「時」のみの値にすることができました。

時間型にしたい場合

残念なことに、Excelでは時間型のデータを文字列として扱うためにセルの書式設定から「文字列」に変更してしまうと、「時間」が「日数」である数値に置き換わってしまいます。

Excelのままでは「74:23:12」のような時間のデータを「文字列」としてインポートできないため、下記のように「Excel」から「CSV」にエクスポートする必要があります。

CSVファイルにエクスポートしたデータをExploratoryで開くことで、値は「74:23:12」のように時間の形式を保ったままデータをインポートすることができます。ちなみに、データタイプはこの時点だと文字列型(character)になっています。

最終的に時間型(hms, difftime)のデータにしたい場合は、こちらの投稿を参考に時間型のデータに変換してみてください。

しかし、時間型(hms, difftime)のデータでは、そのままチャートで可視化するのは難しいため、実際に使う際は数値型に変換してから利用することになります。

数値型に変換する場合は、列ヘッダメニューにある「データタイプの変換」から「Numeric(数値)タイプに変換」から希望する「日、時、分、秒、週」の単位を選ぶことになります。

そうすることで、時間型のデータを数値に変換した上で、チャート等で可視化をすることができます。

もし最終的に時、分、秒の「時」のみを使用する場合であれば、時間型(hms, difftime)に変換せずに、列ヘッダメニューにある「データタイプの変換」から「Numeric(数値)タイプに変換」することで「時」のみを残して数値型に変換することも可能です。