【问题标题】:Error with the “standard unambiguous date” for string-to-date conversion in RR 中字符串到日期转换的“标准明确日期”错误
【发布时间】:2020-07-02 20:39:36
【问题描述】:

所以我正在尝试这段代码,我过去曾将它用于其他数据整理任务,没有错误:

## Create an age_at_enrollment variable, based on the start_date per individual (i.e. I want to know an individual's age, when they began their healthcare job).

complete_dataset_1 = complete_dataset %>% mutate(age_at_enrollment = (as.Date(start_date)-as.Date(birth_date))/365.25)

但是,我不断收到以下错误消息: “charToDate(x) 中的错误:字符串不是标准的明确格式”

我相信这个错误正在发生,因为在我使用的管理数据集中,start_date 和birth_date 变量的格式很奇怪:

start_date    birth_date
2/5/07 0:00   2/28/1992 0:00

我找不到关于为什么数据被格式化的答案,所以关于如何在不改变原始管理数据集的情况下解决这个问题有什么想法吗?

【问题讨论】:

    标签: r tidyverse date-format data-wrangling


    【解决方案1】:

    您对as.Date 的调用中的歧义是日期或月份是否在前。要解决此问题,您可以使用as.Dateformat 参数:

    complete_dataset_1 = complete_dataset
        %>% mutate(age_at_enrollment = (
            as.Date(start_date, format="%m/%d/%Y") -
            as.Date(birth_date, format="%m/%d/%Y")) / 365.25)
    

    处理闰年边缘情况的更精确的计算年份差异的方法是使用lubridate 包:

    library(lubridate)
    complete_dataset_1 = complete_dataset
        %>% mutate(age_at_enrollment = time_length(difftime(
            as.Date(start_date, format="%m/%d/%Y"),
            as.Date(birth_date, format="%m/%d/%Y")), "years")
    

    【讨论】:

    • 非常感谢!但是,我很好奇,我只是在寻找一个年龄变量,它告诉我一个人是 25 岁、26 岁、27 岁等。划分两列之间差异的最佳方法是什么?因为现在,我刚刚创建的年龄变量以天为单位告诉我观察的年龄,这比我要查找的更详细。
    • 计算年的确切差异是很棘手的。 lubridate 包提供了一种方法,see here
    猜你喜欢
    • 2013-01-23
    • 2018-11-04
    • 2012-07-21
    • 2016-10-14
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多