Невозможно преобразовать символьный / факторный класс в дату - PullRequest
1 голос
/ 21 января 2020

Я знаю, что этот вопрос часто задают, но я прихожу к вам только потому, что попробовал все (включая подсказки из похожих вопросов, которые мне удалось понять).

У меня довольно большой файл CSV ( > 16 000 строк), в том числе столбец «Дата», содержащий даты в следующем формате «01.01.1999». Однако при загрузке файла столбец распознается не как дата, а как фактор с read.csv2 или символ с fread (пакет data.table). Я загрузил библиотеку lubridate. В обоих случаях я пытался преобразовать столбец в формат даты, используя все известные мне методы (столбец = Дата, данные = тест):

as.Date(test$Date, format = "%d/%m/%Y", tz = "")

или

strptime(test$Date, format = "%d/%m/%y", tz = "")

или

as_date(test$Date)

А также функция dmy из lubridate и

as.POSIXct(test$Date, "%d/%m/%y", tz = "").

Я также попытался изменить формат: ymd вместо dmy, "-" вместо "/". Я даже пытался изменить класс символов на цифру c (при загрузке с fread), а класс фактора на цифру c (при загрузке с read.csv2).

Несмотря на все это, столбцы остаются в своих классах факторов / символов.

Кто-нибудь знает, что я пропустил?

Ответы [ 2 ]

1 голос
/ 21 января 2020

Просто используйте функцию anydate() из пакета в любое время :

R> library(anytime)
R> var <- as.factor(c("01/01/1999", "01/02/1999"))
R> anydate(var)
[1] "1999-01-01" "1999-01-02"
R> 
R> class(anydate(var))
[1] "Date"
R> 
R> class(var)
[1] "factor"
R> 
R> 

Она прочитает примерно любое время ввода и преобразует его без указания формата , и это работает до тех пор, пока представленное несколько стандартно ( т.е. мы не работаем с двумя git years et c).

(В противном случае вы, конечно, также можете использовать базовые функции R после первого преобразования из коэффициента обратно в символ через as.character(). Но anytime() и anydate() делают это, и многое другое, для вас тоже .)

0 голосов
/ 21 января 2020

Если вы используете read.csv2, попробуйте

read.csv2(..., stringsAsFactors=F)

, а затем продолжайте с as.Date

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...