エクセルのデータを読み込んだら、もともとあった日付が数字に変更されてしまうことがあります。その場合は変換が必要です。
## まずエクセルで数字と日付の対応を確認しましょう
エクセルで数字と日付の関係を簡単に確認できます。次の手順で試してみましょう:
1. 新しいExcelシートを開きます
2. A列に「1」「2」「3」と入力します
3. 入力した数字を選択します
4. 「%」ボタン(画像の赤い矢印が指している部分)をクリックします
5. 表示されたメニューから「日付」 (Date) を選びます
![[Pasted image 20250429143308.png|400]]
すると、数字が日付に変わります。
- 1 → 明治33年1月1日
- 2 → 明治33年1月2日
- 3 → 明治33年1月3日
明治33年というのは1900年です。
![[Pasted image 20250429143345.png|300]]
これは見え方が変わっただけで、中身は数字です。実はエクセルでは、日付はただの数字です。画面には「1900年1月1日」と表示されていますが、エクセルの内部では単に「1」という数字として保存されています。すなわち、
- 数字「1」= 1900年1月1日
- 数字「2」= 1900年1月2日
- そして1日増えるごとに数字も1増えていきます
この規則がありますので、「43831」という数字は「2019年12月31日」を表します。エクセルがこの数字を日付として表示してくれるので、私たちは日付として理解できるのです。
この仕組みのおかげで、 日付の計算が簡単にできます。つまり、期間を求めるたり、何日後かを計算したりしやすくなります。
## Rで確認してみましょう
Rでも同様に、数字を日付として扱うことができます。
```r
> as.Date(2, origin = "1899-12-30")
[1] "1900-01-01"
```
`2` が `1900-01-01` となりました。
基準日がエクセルと微妙に違いますが、細かいことは気しなくても大丈夫です。
```R
# データフレームを作成
df <- data.frame(numdate = c(45780, 45856, 45947, 46111, 46252))
# データフレームの内容を確認
print(df)
# 数値日付
# 1 45780
# 2 45856
# 3 45947
# 4 46111
# 5 46252
# データフレーム内の数値列を日付形式に変換
df$date <- as.Date(df$numdate, origin = "1899-12-30")
# 変換後のデータフレームを確認
print(df)
# numdate date
# 1 45780 2025-05-03
# 2 45856 2025-07-18
# 3 45947 2025-10-17
# 4 46111 2026-03-30
# 5 46252 2026-08-18
```
## 普通に読み込めば多くは問題ありません
つぎにエクセルで以下のような日付を入力して、Rで読み込んでみましょう。
![[Pasted image 20250429145031.png|150]]
![[Pasted image 20250429145347.png|200]]
この内容をみてみると、`POSIXct` という日付と時刻の形式になっています。
![[Pasted image 20250429145430.png|300]]
Excelで作成した日付データをRに読み込む場合、基本的にはこ例のように自動的に POSIXct や Date 形式に変換されます。しかし、場合によっては単なる数値として読み込まれてしまうことがあります。
そのときには、先ほど示したような方法をつかって日付に変更してください。