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
에서는 이처럼 문자열로 저장된 날짜 데이터는 R
의 Date
클래스로 변환해야 한다. 이 Date
클래스는 수치 데이터로 날짜를 보관하며, R
에서 제공하는 다양한 날짜 관련 함수들을 활용할 수 있게 해 준다.
일단 Date
클래스로 변환이 되면, , 날짜에 대한 수치 값은 January 1, 1970 (1970-01-01) 이후의 날짜 수를 나타낸다.
8.1.1 as.Date()
함수
R
의 base
패키지는 문자열 형태의 날짜 데이터를 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
클래스로 변환이 되면, 날짜 데이터에 대한 산술연산을 수행할 수 있다.
<- as.Date("1971-01-01")
a class(a)
## [1] "Date"
# days since 1970-01-01
as.numeric(a)
## [1] 365
# date arithmetic
<- as.Date("1970/12/31")
a
+ 2 a
## [1] "1971-01-02"
a
변수는Date
클래스가 되었다.- 그러면서 또한
a
변수는 수치형 데이터이다. - 날짜의 산술연산이 가능하다. 그 결과는 경과된 날짜 수(
1 days
)가 된다. a + 2
는 결국 2일이 경과된 날짜를 확인해 준다.
이제 좀더 쉽게 문자열을 다양한 형태의 Date
클래스로 변환하는 방법에 대하여 살펴 보기로 한다!!!