根据年龄和事件日期计算出生日期
Calculate date of birth from age and event date
我有两列,一列有年龄,例如(34) 和另一列事件日期,例如(2019-04-26:01:20:51)。我想根据以上两列创建一个 returns 出生日期的新列)。非常感谢您的帮助。
由于没有可用的示例数据,我使用提供的数据创建了一个示例数据框。代码片段如下。您不需要为此使用任何外部包。相反 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 对象的元素(例如:year
、mon
、mday
等) .然后相应地可以格式化approx_DOB
列。查看此 answer 了解更多信息。
这是另一个例子,有 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
我有两列,一列有年龄,例如(34) 和另一列事件日期,例如(2019-04-26:01:20:51)。我想根据以上两列创建一个 returns 出生日期的新列)。非常感谢您的帮助。
由于没有可用的示例数据,我使用提供的数据创建了一个示例数据框。代码片段如下。您不需要为此使用任何外部包。相反 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 对象的元素(例如:year
、mon
、mday
等) .然后相应地可以格式化approx_DOB
列。查看此 answer 了解更多信息。
这是另一个例子,有 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