【问题标题】:Calculate date of birth from age and event date [duplicate]根据年龄和事件日期计算出生日期[重复]
【发布时间】:2019-08-12 05:59:27
【问题描述】:

我有两列,一列有年龄,例如(34) 和另一列显示事件的日期,例如(2019-04-26:01:20:51)。我想创建一个新列,根据上述两列返回出生日期)。非常感谢您的帮助。

【问题讨论】:

  • 你好安吉拉,欢迎来到 SO。您能否提供一个示例数据供我们使用。您可以使用dput(<your_data>) 获取此信息。另外你有什么办法解决这个问题?
  • 你想要包lubridaet,函数years:试试DateEvent - lubridate::years(34)

标签: r lubridate


【解决方案1】:

由于没有可用的示例数据,我使用提供的数据创建了一个示例数据框。代码 sn-p 如下所示。您不需要为此使用任何外部包。相反,as.POSIXlt 应该就足够了。

df <- data.frame(event = c("2019-04-26 01:20:51"), age = c(34)) 
df$event <- as.POSIXlt(x = df$event, format = "%Y-%m-%d %H:%M:%S") # define format here    
#df$approx_DOB <- (df$event$year+1900)-df$age # 1900 to get actual year
df$approx_DOB <- NA
df$approx_DOB <- df$event
df$approx_DOB$year <- (df$event$year) - df$age # no 1900, since editing the age directly
df$YearOfBirth <- NA
df$YearOfBirth <- (df$event$year+1900) - df$age # Gives year alone

输出:

    > df
                event age          approx_DOB YearOfBirth
1 2019-04-26 01:20:51  34 1985-04-26 01:20:51        1985

奖励:您可以使用$ 进一步访问POSIXlt 对象的元素并指定所需的类型(例如:yearmonmday 等)。然后可以相应地格式化approx_DOB 列。查看此answer 了解更多信息。

【讨论】:

  • 是的,这也是我的想法——你可以计算大约 DOB 而不是精确的一个
【解决方案2】:

这是另一个例子,使用 tidyverse 和 lubridate。我相信这是一个更好的解决方案,因为我将只计算一年的出生日期,并且使用大数据集,您的计算速度会更快。有效的完整日期不会给您确切的出生日期,并且可能会出现一些大问题。因此,这是我的解决方案:

library(tidyverse)
library(lubridate)

df <- tibble::tibble(event = c("2018-04-26 02:30:10"), age = c(34))

df_separate <- df %>%
  dplyr::mutate(year = as.numeric(lubridate::year(event)), 
                DOB_Y_approximated = year - age)

你会得到确切的出生年份,我认为这是一个更好的输出。

  # A tibble: 1 x 4
  event                 age  year DOB_Y_approximated
  <chr>               <dbl> <dbl>              <dbl>
1 2018-04-26 02:30:10    34  2018               1984

【讨论】:

    猜你喜欢
    • 2013-10-31
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    相关资源
    最近更新 更多