簡體   English   中英

如何使用read.csv導入4位數字的年份值而不是2位數字

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

我需要使用read.csv導入日期。 該日期在csv文件中為“ dd-mm-yyyy”格式。 我在下面附加了示例數據。

UniqueId DOB

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

即使我將日期導入為字符,Read.csv也會將日期轉換為“ dd-mm-yy”格式。 我需要它來導入所有4位數字的年份。

我的代碼和結果是:

x <-read.csv(“ file”,header = TRUE,colClasses = c(“ DOB” =“字符”))

我也嘗試過:

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

兩者的結果:

UniqueId DOB

  1. 84年1月4日
  2. 24-08-04
  3. 06年12月12日
  4. 70年5月8日
 > 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM