R의 기본함수와 날짜 패키지 중 하나인 lubridate를 가지고 여러 날짜 테스트를 수행하였다.
1. 현재 날짜
Sys.Date() 현재 날짜
Sys.time() 현재 날짜와 시간
2. 날짜 파싱(날짜 타입이 아니어서 날짜로 바꾸어주는 것)
(보통 문자 → 날짜로 변경)
as.Date와 strptime, as.POSIXct가 있는데 여기서 strptime은 포맷 생략이 불가하나 as.Date와 as.POSIXct는 기본순서(년월일)로 해석할 경우 포맷 생략이 가능하다.
3. 날짜 포맷 변경
strftime('2023/12/25','%A')
4. 날짜 연산
일반적으로 Line 6처럼 100일 후를 계산할 수 있다.
Line 8처럼 날짜 차이를 구하면 타입이 difftime이라는 데이터 타입이 출력되는데 이 데이터 타입이 싫으면 as.numeric을 씌우면 된다.
그리고 한 가지 특이한 점은 Date 타입과 POSIXt 타입은 연산이 불가하다.
대신 difftime이라는 함수를 사용하면 연산할 수 있다.
이 때의 데이터 타입도 difftime이다.
연습문제를 하나 풀어보겠다.
emp에서 10번 부서원들의 이름, 부서번호, 입사 날짜와 함께 급여 검토일을 출력하여라.
단, 급여 검토일은 입사일로부터 100일 후이다.
참고로 base 함수로도 날짜를 계산할 수 있다.
v1 + months(3) # base function 3개월 후
v1 - months(3) # base function 3개월 전
v1 + years(3) # base function 3년 후
v1 - years(3) # base function 3년 전
Sys.time() + hours(3) # base function 3시간 후
Sys.time() - hours(3) # base function 3시간 전
이렇게 계산이 가능하다.
근데 우리집 컴퓨터에서는 다음과 같은 에러가 뜬다..
학원에선 됐는데... 다시 학원가서 해봐야겠다.
엥 lubridate 패키지를 설치하니까 작동된다. 뭐지?
5. 날짜 추출
lubridate 패키지를 이용하여 추출할 수 있으며, 출력되는 모든 데이터 타입은 숫자이다.
아래처럼 날짜 파싱이 되지 않은 문자도 연도 추출이 가능하다.
요일도 리턴이 가능하나 숫자 타입으로 출력되므로 옵션을 넣으면 문자 형태로 리턴이 된다.
아래 콘솔 창에 Levels 라고 나와있는 것이 있다. factor의 요소들을 level = class 라고 하는데, class(lubricate::wday(v1, label=TRUE)) 하면 ordered factor라고 나온다.
요일 순서를 보장하기 위하여 ordered factor로 저장한 것이며, 그렇지 않으면 금요일부터 정렬된다(가나다 순).
이 뜻은 순서형 factor라는 의미이며 순서형 factor에는 요일, 상중하, 학년 등이 있다. 명목형 factor라는 것도 있는데 이는 남/여와 같은 것이 있다.
예제를 하나 풀어보자.
emp에서 각 직원의 입사날짜의 요일을 출력하여라.
6. 기타
SparkR:: last_day 현 버전은 지원하지 않는다. 그 달의 마지막 날짜를 출력하는 것으로 lubricate에 같은 함수가 있다.
lubricate::days_in_month(v1)을 사용하면 된다.
SparkR::next_day 역시 현 버전은 지원하지 않는다.
SparkR::months_between 현 버전은 지원하지 않는다.
나중에 블로그나 도서를 찾아볼 때 위의 함수가 있을 시에는 참고하지 않도록 메모해두었다.
연습문제를 하나 풀어보겠다.
movie_ex1.csv 파일을 읽고 수원시 영통구 지역의 20대 남성의 이용비율을 요일과 함께 출력하여라
우선 내 풀이이다.
나는 str_pad를 이용하여 월과 일에 0을 다 채워서 날짜 파싱을 했는데 선생님은 지난 시간에 배웠듯 str_pad를 사용하지 않고도 날짜 파싱을 하여 해설해주셨다.
복습후기
외울 게 너무 많다
할 게 너무 많다
'배우기 > 복습노트[R과 분석]' 카테고리의 다른 글
[복습] R(programming language) 사용자 정의 함수 (0) | 2023.11.30 |
---|---|
[실습문제] 2023. 11. 28.(화) (3문제) (0) | 2023.11.29 |
[복습] R(programming language) 이전값 가져오기(zoo::na.locf) (0) | 2023.11.29 |
[복습] R(programming language) 반복 제어문(next, break, quit) (0) | 2023.11.29 |
[복습] R(programming language)에서 SQL 작성하기(sqldf 패키지) (0) | 2023.11.28 |