楼主: dave1221
2101 4

[问答] 例:R 3.3.3 win10 64位 如何精确的计算时间差例如年龄 [推广有奖]

  • 1关注
  • 1粉丝

大专生

96%

还不是VIP/贵宾

-

威望
0
论坛币
29260 个
通用积分
1.1003
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
520 点
帖子
18
精华
0
在线时间
101 小时
注册时间
2009-10-29
最后登录
2024-3-13

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
事前:这是一个关于如何提问的例子贴,贴中的问题会在回复中给出解答

一列数据是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位


二维码

扫码加我 拉你入群

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

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

关键词:win10 Win 时间差 difference Windows 时间差 如何

沙发
dave1221 发表于 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

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

使用道具

藤椅
dave1221 发表于 2017-4-25 17:06:08 |只看作者 |坛友微信交流群
本贴的本意其实是说明提问的正确姿势

以下五步

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

使用道具

板凳
stzhao 在职认证  发表于 2017-4-25 23:33:19 |只看作者 |坛友微信交流群
很少有人规范的提问,经常都是乱吼一嗓子等回答

使用道具

报纸
nkunku 发表于 2017-4-26 07:07:02 |只看作者 |坛友微信交流群
stzhao 发表于 2017-4-25 23:33
很少有人规范的提问,经常都是乱吼一嗓子等回答
是的 坛上好多人提问都是这样

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 08:43