全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2426 4
2017-04-25
事前:这是一个关于如何提问的例子贴,贴中的问题会在回复中给出解答

一列数据是40,000行出生日期列,想将此列转化为年龄,问题衍生为如何精确计算两个给定时间的时间差,并转换为指定格式

个人思路是通过将字符转换成日期类数据,得到天数差再除以365.25。

于是造了两个数据进行试验:
> y1<-as.Date("1986-11-04")
> y2<-as.Date("2017-01-01")
> y2-y1
Time difference of 11016 days

> as.numeric(y2-y1)/365.25
[1] 30.16016


由于存在闰年的影响,所以除以365.25,然而并不够精确,网上很多答案都是自己写函数按照条件分情况,比较麻烦

想要的结果是尽量用一行代码得到精确地结果,尤其是考虑到当出生日期是1月1日的时候闰年的影响可能比较突出。

R版本:3.3.3,windows版本:win10 64位


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-4-25 17:05:09
先回答问题:

两种方案

1. 如果需要保留小数点
> library(lubridate)
as.numeric(as.period(interval(y1,y2),unit="years"),unit="years")
[1] 30.15999
这个式子中函数自己可以查看帮助文件,注意其中as.period的对象这里在制定unit的前提下一定要是interval返回的结果,想改变单位,改变最后一个unit=后面的参数即可:"years","days","hours","mins",默认是秒,月份不好用,用年数乘以24即可

2 不保留小数点,还是用as.period函数
> as.period(interval(y1,y2),unit="year")@year
[1] 30
> as.period(interval(y1,y2),unit="month")@month
[1] 361
> as.period(interval(y1,y2),unit="day")@day
[1] 11016

这两个方法都会考虑闰年和时区。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-4-25 17:06:08
本贴的本意其实是说明提问的正确姿势

以下五步

- 通过什么样的步骤能够重新得到问题结果
- 期望的结果是什么
- 取而代之的结果是什么
- 你做过的所有尝试
- 你使用的R版本,系统
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-4-25 23:33:19
很少有人规范的提问,经常都是乱吼一嗓子等回答
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-4-26 07:07:02
stzhao 发表于 2017-4-25 23:33
很少有人规范的提问,经常都是乱吼一嗓子等回答
是的 坛上好多人提问都是这样
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群