我有两列数据:
DoB: yyyy/mm
Reported date: yyyy/mm/dd
两者都是字符格式。
我想通过从报告日期减去DoB来计算年龄,而不向DoB添加虚构的日子,以便年龄为28.5(意味着28岁半)。
请有人帮我编码,我很难挣扎!
非常感谢R新手。
答案 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