2016-10-16 6 views
-1

Я пытаюсь преобразовать столбец данных из формата факторов в формат даты, но некоторые проблемы всегда появляются. Оригинальный столбец дата, как показано ниже:Преобразование фактора даты с использованием as.date в R

date 
1/01/2008 
1/01/2008 
1/01/2008 
1/01/2008 
1/01/2008 

Посмотрите на своих первых 6 строк

head(PowerConsumption) 

Это показывает, что:

$ Date: Factor w/ 729 levels "1/01/2007","1/01/2008",..: 189 189 189 189 189 189 189 189 189 189 ... 
  1. Не совсем понимаю, что все эти 189 означает?

  2. Я хотел изменить коэффициент на сегодняшний день.

После применения этого кода:

date <- as.Date(PowerConsumption$Date, format = "%d%m%Y") 

Все значения становятся NA. Может ли кто-нибудь указать, что случилось, пожалуйста?

+1

Сначала вы должны преобразовать его в вектор символа. Попробуйте обернуть 'PowerConsumption $ Date' в' as.character': 'as.Date (as.character (PowerConsumption $ Date), format ="% d% m% Y ")' – h3rm4n

+1

можете попробовать эту 'date <- as.Date (PowerConsumption $ Date, format = "% d /% m%/Y") 'ie' strDates <- c ("01/05/1965", "16/08/1975") даты <- as .Date (strDates, "% d /% m /% Y") ' – Keniajin

+0

Прочтите/создайте исходный фрейм данных' PowerConsumption' с параметром 'stringsAsFactors = FALSE', чтобы избежать этого в будущем. – hrbrmstr

ответ

3

Во-первых, все эти 189 означают, что вектор начинается со значений 189-го уровня этой фактор-переменной. Упрощенный пример:

> x <- factor(c("1/01/2007","1/01/2008","1/01/2007","1/01/2008")) 
> str(x) 
Factor w/ 2 levels "1/01/2007","1/01/2008": 1 2 1 2 

Во-вторых, если вы хотите, чтобы преобразовать эту переменную даты в формате даты, необходимо указать правильный формат инициирующего переменной (вы опустили / при указании параметра формата):

> as.Date(x, format="%d/%m/%Y") 
[1] "2007-01-01" "2008-01-01" "2007-01-01" "2008-01-01" 

Вопреки тому, что я сказал в комментариях, такая фактор-переменная необязательно должна быть преобразована в символ сначала с as.character.


Другой вариант cenvert значения факторов для дат с помощью функции anydate из нового anytime пакета:

> library(anytime) 
> anydate(x) 
[1] "2007-01-01" "2008-01-01" "2007-01-01" "2008-01-01" 
+0

Спасибо за ваши комментарии h2rm4n. Однако я не понимаю, почему он начинается только с 189-го. У меня нет никаких NA в этом столбце ... – Sunshine

+0

@Sunshine Это потому, что первые даты одинаковы, и у вас есть 188 дат, которые раньше, чем '2008-01-01'. Чтобы получить представление, проверьте вывод 'as.integer (PowerConsumption $ Date)'. – h3rm4n

+0

@Sunshine Я также добавил альтернативу с пакетом 'anytime'. – h3rm4n

0

Существует, конечно, lubridate решение:

x <- factor(c("1/01/2007","1/01/2008","1/01/2007","1/01/2008")) 

dmy(x) 
#[1] "2007-01-01" "2008-01-01" "2007-01-01" "2008-01-01" 
+0

Это выглядит очень просто! Попробуй тоже. Благодаря! – Sunshine

Смежные вопросы