R에서 변수 a에게 날짜 모양의 문자열을 저장하면 그건 문자열이지 날짜가 아니다. 2월 25일의 닷세 뒤는 3월 2일이고, 올해가 윤년이면 3월 1일이 된다는 걸 알게 하려면 변수에 저장된 문자열을 날짜 형식으로 변환해 주어야 하는데 그 때 사용되는 함수가 as.Date()이다. 다음 예제를 보자.

 

> a<-"2018-2-25"
> a
[1] "2018-2-25"
> a+5 Error in a + 5 : non-numeric argument to binary operator
> class(a)
[1] "character"
> b<-as.Date(a)
> b
[1] "2018-02-25"
> b+5
[1] "2018-03-02"
> class(b)
[1] "Date"

a에게 "2018-2-25"라는 문자열을 저장했을 땐 a+5같은 연산이 작동을 하지 않았다. class() 함수로 변수의 종류를 살펴보면 "character"라고 나온다. 다시 a를 as.Date() 함수로 변환하여 b에 저장한 후 b+5 연산을 해 보면 이젠 정확하게 "2018-03-02"를 표시해 주는 걸 볼 수 있다. Date class인 변수 a가 저장하고 있는 값은 1970년 1월 1일을 0으로 정하고 이후 하루가 지날 때마다 1씩 증가하는 값을 가진 정수이다.

> as.integer(b)
[1] 17587

즉, 변수 b가 갖고 있는 2018년 2월 25일은 1970년 1월 1일로부터 17587일이 지난 날이다. 문자열이 아닌 정수 17587을 Date class로 변환할 수 있을까? 가능하다. 다만, 반드시 origin을 필요로 한다.

> c<-as.Date(17587)
Error in as.Date.numeric(17587) : 'origin'이 반드시 주어져야 합니다
> c<-as.Date(17587,origin="1970-1-1")
> c
[1] "2018-02-25"

origin은 반드시 1970년 1월 1일이어야 할 필요는 없다.

Posted by jujaeuk
,