裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

年齢の計算は暗算でもできる

2013年11月26日 | ブログラミング

中澤さんが,

> RのISOdate()関数は1899年以前の日付も扱えるので,例えば明治32年7月1日生まれ,
> 平成13年3月12日に亡くなった方の生存期間は,
> ISOdate(2001,3,12)-ISOdate(1899,7,1)
> とすれば,正しくTime difference of 37144 daysと返ってくる。この結果を365.24で
> 割ると,101歳で亡くなった方ということがわかる。

と,書いている。年齢を求めるのが目的ではなく,生存期間(日数)を求めるのが主目的。

一方,年齢計算は単純で,「生年 y1 と当年 y2 の差を取り,もし当月 m2 当日 D2 が誕生日 M1, D1 の前ならば 1 歳差し引く」

R で書く方が面倒なんだけど,やっていることは簡単で,閏年がどうのとか,365.24 などというマジックナンバーも無関係

age = function(y1, m1, d1, y2, m2, d2) {
    y2 - y1 - (m2 < m1 || (m2 == m1 && d2 < d1))
}


> (ISOdate(2001, 3, 12)-ISOdate(1899, 7, 1)) / 365.24
Time difference of 101.6975 days
> age(1899, 7, 1, 2001, 3, 12)
[1] 101

> (ISOdate(2001, 6, 30)-ISOdate(1899, 7, 1)) / 365.24
Time difference of 101.9987 days
> age(1899, 7, 1, 2001, 6, 30)
[1] 101

> (ISOdate(2001,7, 1)-ISOdate(1899, 7, 1)) / 365.24
Time difference of 102.0014 days
> age(1899, 7, 1, 2001, 7, 1)
[1] 102

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村