【发布时间】:2022-01-13 16:25:31
【问题描述】:
又是新的复杂的一天
以下是我作为输入的列和行:
ID Age
123 23 Years 1 Month 2 Days
125 28 Years 9 Month 14 Days
126 28 years
127 34 YEAR
128 35 Years 8 Month 21 Days
129 38 Years 5 Month 25 Days
130 32.8
我需要在新列中每年计算它们,例如:
ID Age Age_new
123 23 Years 1 Month 2 Days 23.1
125 28 Years 9 Month 14 Days 28.9
126 28 years 28
127 34 YEAR 34
128 35 Years 8 Month 21 Days 35.8
129 38 Years 5 Month 25 Days 38.5
130 32.8 32.8
我尝试了 by stringr 包,但我只得到第一个字符串
不像上面那样提供。
【问题讨论】:
-
没有完美的方法可以做到这一点:月份可以是 28、29、30 或 31 天,因此您显示的十进制年份是一个近似值。您是否假设一个月为
30.41667天长?那么闰年呢,你预计每月有30.5天吗?我们如何知道使用哪个? -
如果小数点后的数字只是月数,您可能会遇到排序问题(例如 23 年零 11 个月 - 23.11 - 会在 23 年零 2 个月 - 23.2 - 如果是按数字或字符顺序排序)
-
这样做的目的是什么,当我编写代码并将其粘贴到此处时,他们的数字年龄已经过时了。获取他们的出生日期。如果您知道获取数据的日期,您可以轻松地用您拥有的数据减去该日期作为自出生以来的持续时间。当您拥有 dob 时,您可以始终以准确的方式对其进行可视化。
-
密切相关:Transforming complete age from character to numeric in R。应用my answer there,只需转换为小写,不带单位的值加上“年”:
library(lubridate);time_length(period(sub("(^\\d+\\.?\\d*$)", "\\1 years", tolower(dat$Age))), unit = "years").