从字符格式中提取“yearmon”并计算R中的年龄

时间:2015-03-05 15:26:19

标签: r date

我有两列数据:

DoB: yyyy/mm
Reported date: yyyy/mm/dd

两者都是字符格式。

我想通过从报告日期减去DoB来计算年龄,而不向DoB添加虚构的日子,以便年龄为28.5(意味着28岁半)。

请有人帮我编码,我很难挣扎!

非常感谢R新手。

3 个答案:

答案 0 :(得分:0)

library(lubridate)

a <- "2010/02"
b <- "2014/12/25"
c <- ymd(b) - ymd(paste0(a, "/01"))  # I don't think this can be done without adding a fictional day
c <- as(c/365.25, "numeric")

如果日期是:

,您希望年龄是多少?

DoB: 2015/01

Reported date: 2015/01/30

答案 1 :(得分:0)

根据建议,lubridate是处理日期的绝佳方法。您可能想要使用difftime的某个版本。您还可以通过设置ymd来使用truncated=1作为yyyy / mm,这意味着该字段可能会丢失。

df <- data.frame(DoB = c("1987/08", "1994/04"),
                 Report_Date = c("2015/03/05","2014/07/04"))

library(lubridate)

df$age_years <- with(df, 
                 as.numeric(
                   difftime(ymd(Report_Date), 
                            ymd(DoB, truncated=1)
                   )/365.25))
df
      DoB Report_Date   age_years
1 1987/08  2015/03/05 27.59206023
2 1994/04  2014/07/04 20.25735797

不幸的是,difftime没有#39岁?因此你还需要划分“天”。你得到的输出。

答案 2 :(得分:0)

在动物园中使用"yearmon"课程。它表示时间为年+分数(其中分数在集合0,1 / 12,...,11/12中),也需要添加虚构天数:

library(zoo)
as.yearmon("2012/01/10", "%Y/%m/%d") - as.yearmon("1983/07", "%Y/%m")

,并提供:

[1] 28.5