如何使用 read.csv 导入 4 位数而不是 2 位数的年份值

How to import 4-digit year value instead of 2-digit using read.csv

我需要使用 read.csv 导入日期。日期在 csv 文件中采用 "dd-mm-yyyy" 格式。我在下面附加了示例数据。

唯一 ID DOB

  1. 01-04-1984
  2. 24-08-1904
  3. 2006 年 12 月 12 日
  4. 05-05-1870

Read.csv 正在将日期转换为 "dd-mm-yy" 格式,即使我将日期作为字符导入也是如此。 我需要它来导入所有 4 位数年份。

我的代码和结果是:

x <- read.csv("file", header=TRUE,colClasses =c("DOB"="character"))

我也试过:

x <- read.csv("file", header=TRUE, stringsAsFactors = FALSE)

两者的结果:

唯一 ID DOB

  1. 01-04-84
  2. 24-08-04
  3. 12-12-06
  4. 05-08-70
> class(x$DOB)
[1] "character"

当我在上面使用 as.Date 函数时,我得到错误值:

> as.Date(dob$DOB, format="%d-%m-%y")  
[1] "01-04-1984" "24-08-2004" "12-12-2006" "05-08-1970"

我读到 as.Date 函数会自动将 00 到 68 之间的年份转换为 21 世纪,将 69 到 99 之间的年份转换为 20 世纪。

因此,我认为我在 read.csv 函数本身中犯了一个错误。

我还没有想出在一行中实现你想要的东西的方法,但如果你能负担得起将任务分成两行,那么试试这个:

library(dplyr) # data frame operations
library(lubridate) # tidyverse-compliant package for operations on dates

x <- read.csv("file.csv", header=TRUE, stringsAsFactors=FALSE)
x <- x %>% mutate(DOB = as.Date(DOB, format="%d-%m-%Y"))
x %>% mutate(year = lubridate::year(DOB)) # just to verify that the operations on dates work as expected
#   UniqueID        DOB year
# 1        1 1984-04-01 1984
# 2        2 1904-08-24 1904
# 3        3 2006-12-12 2006
# 4        4 1870-05-05 1870