8.1 R에서의 날짜 데이터

R에 데이터 세트에 있는 날짜 데이터가 불려오기 전에는 보통 날짜 데이터들은 문자(문자열) 값들을 가진 컬럼에 저장이 된다. 그러나 날짜 데이터들은 원래 수치 데이터이며, 문자열로 저장이 되면 아주 중요한 정보를 잃게 된다.

예를 들어, “2018년 3월 5일”에서 하루가 경과된 날을 계산하려면 다음과 같이 하면되는데, 그 결과를 에러가 날 것이다:

# string dates have no numeric value, so this errors
"2018-03-05" + 1
## Error in "2018-03-05" + 1: 이항연산자에 수치가 아닌 인수입니다
## Error in "2018-03-05" + 1: non-numeric argument to binary operator

R에서는 이처럼 문자열로 저장된 날짜 데이터는 RDate 클래스로 변환해야 한다. 이 Date 클래스는 수치 데이터로 날짜를 보관하며, R에서 제공하는 다양한 날짜 관련 함수들을 활용할 수 있게 해 준다.

일단 Date 클래스로 변환이 되면, , 날짜에 대한 수치 값은 January 1, 1970 (1970-01-01) 이후의 날짜 수를 나타낸다.

8.1.1 as.Date() 함수

Rbase 패키지는 문자열 형태의 날짜 데이터를 Date 클래스로 변환할 수 있는 as.Date() 함수를 제공한다. 그러나 사용하는데에 두 가지의 디폴트 형태(자세한 날짜 형태에 대해서는 ?srtptime을 참고바람)로 날짜 데이터가 저장되어 있지 않다면 사용하는데 많은 어려움을 겪을 수 있다.

다음의 예를 살펴보기로 한다.

# as.Date only accepts a couple of formats by default
# good
as.Date("2015-02-14")
## [1] "2015-02-14"
# bad
as.Date("02/14/2014")
## Error in charToDate(x): character string is not in a standard unambiguous format
# specify a format to fix
as.Date("02/14/2014", format="%m/%d/%Y")
## [1] "2014-02-14"
  • 2015-2-14” 형태의 문자열에 대해서는 Date 클래스로 변환해 준다.
  • 02/14/2014” 형태의 문자열은 Date 클래스로 변환하지 못한다.
  • 02/14/2014” 형태의 문자열을 Date 클래스로 변환하기 위해서는 format = 인수를 이용하여 형태를 맞춰 줘야 한다.

일단 날짜 데이터가 Date 클래스로 변환이 되면, 날짜 데이터에 대한 산술연산을 수행할 수 있다.

a <- as.Date("1971-01-01")
class(a)
## [1] "Date"
# days since 1970-01-01
as.numeric(a)
## [1] 365
# date arithmetic
a <- as.Date("1970/12/31")

a + 2
## [1] "1971-01-02"
  • a 변수는 Date 클래스가 되었다.
  • 그러면서 또한 a 변수는 수치형 데이터이다.
  • 날짜의 산술연산이 가능하다. 그 결과는 경과된 날짜 수(1 days)가 된다.
  • a + 2는 결국 2일이 경과된 날짜를 확인해 준다.

이제 좀더 쉽게 문자열을 다양한 형태의 Date 클래스로 변환하는 방법에 대하여 살펴 보기로 한다!!!