2014-01-09 3 views
0

У меня есть кадр данных, как это:не удалось преобразовать фактор на сегодняшний день

> a=runif(5) 
    > b=c("1-Jan-13", "2-Jan-13", "3-Jan-13", "4-Jan-13", "5-Jan-13") 
    > dd = data.frame(a,b) 
    > dd 
      a  b 
1 0.1873622 1-Jan-13 
2 0.1902314 2-Jan-13 
3 0.7476141 3-Jan-13 
4 0.3584118 4-Jan-13 
5 0.2152858 5-Jan-13 

    > str(dd) 
'data.frame': 5 obs. of 2 variables: 
$ a: num 0.187 0.19 0.748 0.358 0.215 
$ b: Factor w/ 5 levels "1-Jan-13","2-Jan-13",..: 1 2 3 4 5 

Я попытался

> dd$b <- as.Date(dd$b, format="%d/%m/%Y") 
    > str(dd) 
'data.frame': 5 obs. of 2 variables: 
$ a: num 0.187 0.19 0.748 0.358 0.215 
$ b: Date, format: NA NA NA NA ... 

и

> dd = data.frame(a,b) 
> dd$b <- as.Date(dd$b, format="%d-%m-%Y") 
> str(dd) 
'data.frame': 5 obs. of 2 variables: 
$ a: num 0.187 0.19 0.748 0.358 0.215 
$ b: Date, format: NA NA NA NA ... 

does'n работы ...

+3

Вам необходимо исправить форматы, которые вы указываете R в ваших датах. С самого начала вы не можете использовать '/', поскольку ваши даты используют '-', и вы не можете использовать'% Y', так как ваши годы составляют две цифры (поэтому используйте '% y'); см. этот http://www.statmethods.net/input/dates.html – rawr

+3

... и я думаю, что вам нужен '% b' за месяц в вашем формате. См. '? Strptime'. – joran

+0

Право и месяц неправильный, тоже – rawr

ответ

1

@rawr, @joran и @ SimonO'Hanlon - все на месте. Родное решение R будет выглядеть примерно так:

a <- runif(5) 
b <- c("1-Jan-13", "2-Jan-13", "3-Jan-13", "4-Jan-13", "5-Jan-13") 
dd <- data.frame(a, b=as.Date(b, format="%d-%b-%y")) 
str(dd) 
## 'data.frame': 5 obs. of 2 variables: 
## $ a: num 0.947 0.997 0.39 0.913 0.178 
## $ b: Date, format: "2013-01-01" ... 

Где %b является короткая версия названия месяца и %y указывает год без века.

ИЛИ

Вы можете установить элегантную lubridate пакет и использовать функцию ymd(), которая действительно хорошо выяснить, в каком формате строка в.

install.packages("lubridate") 
library(lubridate) 

dd <- data.frame(a, b=dmy(b)) 
str(dd) 
## 'data.frame': 5 obs. of 2 variables: 
## $ a: num 0.947 0.997 0.39 0.913 0.178 
## $ b: POSIXct, format: "2013-01-01" ... 

Пока что вы» Повторное занятие выглядит круто с типом POSIXct против типа Date, вы золотистый.

Как сказал @joran, tho, не повредит щеткой на ?strptime.

-1
> dd 
     a  b 
1 0.2102705 1-Jan-13 
2 0.9018757 2-Jan-13 
3 0.4113829 3-Jan-13 
4 0.2685403 4-Jan-13 
5 0.4664033 5-Jan-13 


> str(dd) 
'data.frame': 5 obs. of 2 variables: 
$ a: num 0.21 0.902 0.411 0.269 0.466 
$ b: Factor w/ 5 levels "1-Jan-13","2-Jan-13",..: 1 2 3 4 5 

Я изменил формат месяца с% m на% b и год с% Y до% y, а затем он отлично работает.

> str(dd) 
'data.frame': 5 obs. of 2 variables: 
$ a: num 0.21 0.902 0.411 0.269 0.466 
$ b: Date, format: "2013-01-01" "2013-01-02" "2013-01-03" "2013-01-04" ... 
Смежные вопросы