Как импортировать 4-значное значение года вместо 2-значного с помощью read.csv - PullRequest
0 голосов
/ 14 апреля 2019

Мне нужно импортировать даты, используя read.csv. Дата в формате "дд-мм-гггг" в CSV-файле. Я добавил пример данных ниже.

UniqueId DOB

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

Read.csv преобразует дату в формат "дд-мм-гг", даже когда я импортирую дату как символ. Мне нужно, чтобы импортировать все 4-значный год.

Мой код и результаты:

x <- read.csv ("файл", заголовок = ИСТИНА, colClasses = c ("DOB" = "символ")) </p>

Я тоже пробовал:

x <- read.csv ("файл", заголовок = ИСТИНА, stringsAsFactors = ЛОЖЬ) </p>

Результат от обоих:

UniqueId 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.

1 Ответ

1 голос
/ 20 мая 2019

Я не нашел пути достижения того, что вы хотите, в одну строку, но если вы можете позволить себе разбить задачу на две строки, попробуйте следующее:

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