1

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

## 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

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

4

1 回答 1

2

您的电话中的歧义as.Date是日期或月份是第一位的。要解决此问题,您可以使用以下format参数as.Date

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")
于 2020-03-22T03:46:40.227 回答