2014/08/01

R - 날짜에서 요일을 추출하여 숫자로 변환하기 // as.Date(), weekdays(), factor(), levels, as.numeric()

# 날짜에서 요일을 추출하여 숫자로 변환하기
#
# 일요일 -> 0
# 월요일 -> 1
# ...
# 토요일 -> 6
#
# 요렇게


1. 테스트용으로 사용할 날짜 벡터를 생성


# c()를 이용하여 문자열 벡터 생성 후
# as.Date() 로 Date 타입으로 형변환하여 // D가 대문자인 점 주의~
# my_date_list 변수에 저장

> my_date_list <- as.Date(c('2014-07-30', '2014-08-01', '2014-08-02'))


2. 날짜에서 요일 추출


# weekdays() 를 이용하여 날짜(Date 타입)에서 '요일'정보를 추출

> weekdays(my_date_list)


3. 요일별 순서 지정


# 요일별 순서를 정하기 위해 factor type을 사용
# factor 내에서의 순서는 levels 옵션을 이용
#
# levels 에서 순서를 지정할 벡터를 먼저 생성

> day_levels <- c("일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일")



# my_date_list에 저장된 날짜의 요일 순번을 확인. ordered 옵션 이용.

> factor(weekdays((my_date_list)), levels=day_levels, ordered=TRUE)


4. 요일 정보 대신에 숫자를 출력


# as.numeric() 으로 형변환만 하면 순번(숫자)으로 출력됨

> as.numeric(factor(weekdays((my_date_list)), levels=day_levels, ordered=TRUE))



# 일요일에 0을 매치시키려면 요렇게 하면 끝

> as.numeric(factor(weekdays((my_date_list)), levels=day_levels, ordered=TRUE) - 1)



우왕, R차다~~

댓글 3개:

  1. YYYYMMDD의 형태로 된 숫자를 as.Date.numeric으로 날짜로 변환하는 방법 문의 드립니다.

    답글삭제
  2. YYYYMMDD의 8자리 숫자로 된 자료를 as.Date.numeric 함수를 사용해서 YYYY-MM-DD형태의 날짜로 변환하는 방법이 있나요?

    답글삭제
    답글
    1. > v <- 20081101

      > date <- as.Date(as.character(v), format = "%Y%m%d")

      또는 date <- strptime(v, format="%Y%m%d")

      형태로 하면 아래와 같은 결과가 나온다고 합니다.

      직접 실행해서 확인하지는 못했네요 ^^;

      > date
      [1] "2008-11-01"

      삭제