【发布时间】:2013-08-27 19:04:31
【问题描述】:
为模拟样本分配出生日期;以下工作,但忽略闰年。
想知道是否有更精确(和优雅)的 r 方法?
# Simulate 10 persons with age evenly distributed 0 to 21
age <- runif(10, 0, 21)
# calc age in seconds
agesecs <- age*365*24*60*60
# subtract from right now to establish 'birthdate'
bday <- as.Date(Sys.time() - agesecs)
bday
[1] "2008-03-28" "1998-06-12" "2010-05-02" "2007-01-11" "2007-06-07"
[6] "1999-05-22" "2004-01-29" "2013-03-29" "1998-06-01" "2006-10-14"
【问题讨论】:
-
用365.25会更准确
-
网络上充斥着那些没有正确计算日期的人的恐怖故事(更不用说一种叫做“Y2K”的东西了)。对于您的示例案例,只需将
Sys.time转换为年-月-日-小时-分钟-秒格式,然后将您的随机“年”转换为相同的格式,您就可以使用内置的时间函数来获取生日。程序员的规则编号[某事]:永远不要重新发明以前肯定由其他人完成的功能。 -
DWin 的解决方案对于我的目的来说无疑是快速且“足够好”的。回答 Fernando 的问题的目的是创建一个模拟记录集,这些记录集与实际记录集相似,但绝不是直接派生的,也不是实际记录掩码的结果。卡尔的建议让我找到了解决方案。
-
它必须是base R吗?使用 lubridate 软件包可以解决问题
标签: r date-arithmetic