변수란 값을 저장하여 선언하는 객체이다.
R에서는 변수 선언 시 <- 사용을 권고하고 있다. = 사용도 무방하나 아주 간혹 문제가 발생한다고 한다.
그리고 변수의 위치는 왼쪽에 오도록 둔다.
변수 명명 규칙
- 숫자 시작 불가(숫자 포함은 가능하다. 모든 언어에서 숫자로 시작하는 것을 금하고 있다)
- 특수기호 가급적 사용 지양(언더바'_'는 예외이며, '.'은 사용을 지양한다, 파이썬에서는 완전 금지)
- 예약어(대명사 또는 함수로 이미 존재하는 이름 등) 사용 금지, 예를 들어 sum을 변수명으로 두는 경우 함수 호출시 문제가 발생한다.
- 한 자리 변수 사용 자제(한 자리 함수가 종종 존재하기 때문이다)
1. 변수 생성
문자변수는 반드시 홑따옴표('') 또는 쌍따옴표("")로 묶어서 전달한다.
홑따옴표와 쌍따옴표는 구분하지 않는다.
2. 타입 확인
class() 를 이용하여 변수 타입을 확인할 수 있다.
참고로 Sys.Date() 하면 오늘 날짜가 출력된다.
날짜는 Date, 숫자는 numeric, 문자는 character 로 출력이 된다.
날짜는 연산이 가능하다.
오늘로부터 100일 뒤를 변수 vdate에 담아 추출하였다.
모든 언어들은 묵시적 형 변환이 되지 않는다(SQL만 가능하다)
R에서는 '1'+1이 계산되지 않는다(형 타입 오류), 서로 다른 데이터 타입은 연산이 불가하며, 날짜만 +100 처럼 연산이 가능하다. 파이썬에서는 100일 뒤 계산을 +100으로 할 수 없다고 한다.
3. 형 변환 함수
첫 번째 수업 언어로 SQL을 배웠으므로 SQL과 비교를 해보겠다.
SQL R
to_char as.character()
to_date as.Date()
to_number as.numeric()
이렇게 매칭된다.
따라서 다음과 같이 형변환함수를 사용하면 계산을 할 수 있다.
3-1. 숫자 → 문자
as.character() 를 사용하면 된다.
"1" 로 출력되었다는 것은 문자로 출력되었다는 것이고, 확인하려면 class()를 사용하면 된다.
3-2. 날짜 → 문자
날짜 출력 포맷을 변경하기 위해서는 strftime 함수를 사용하면 된다. 출력되는 포맷은 문자이다.
참고로 오늘 설치한 R에서는 as.character(Sys.Date(), '%Y') 는 불가하다. 다른 블로그나 도서를 참고할 때 주의하여야겠다.
위와 같이 함수를 사용할 때에 함수의 목록이 쫙 뜨는데, base 라고 뜨는 것은 내장함수이고, stringr 이라고 뜨는것은(여기에는 안떠있음) 패키지로 설치한 외장함수이다.
패키지로 외장함수 설치하는 방법은 따로 기록해두도록 하겠다.
이렇게 날짜를 출력할 수 있는데, 출력된 날짜의 포맷은 문자이므로 날짜를 문자로 바꾸는 함수가 될 것이다.
그래서 여기서는 날짜를 계산한답시고 strftime(Sys.Date(),'%Y') -10 이렇게는 불가하다.
3-3. 문자 → 날짜
문자를 날짜로 변경하는 함수는 두 가지가 있다.
as.Date(대상, [format])
strptime(대상, format)
이렇게 두 가지인데 차이점은 as.Date는 format을 생략할 수 있고 strptime은 format 생략이 불가하다.
그리고 as.Date 로의 날짜 출력은 date로 출력되지만 strptime은 POSIXlt 타입으로 출력이 된다. 이 타입도 날짜라고 한다.
as.Date()의 테스트 결과이다.
위의 as.Date와 같은 테스트를 수행하였다.
Line 1 테스트 결과는 에러가 났다. 포맷이 없기 때문이다.
Line 2처럼 포맷을 넣어야 하고, Line 3처럼 날짜 계산도 가능하다.
그리고 class()를 했을 때 Date 타입이지만 POSIlt 로 출력이 되었다.
이렇게 날짜를 파싱하는 이유는, 우리가 인지하는 날짜와 컴퓨터가 인지하는 날짜가 다르기 때문이다.
3-4. 문자 → 숫자
자료에 1,100 이렇게 표기되어 있으면 문자 타입이다. 이 자료를 숫자로 바꾸려면 어떻게 할 수 있을까.
자료 하나를 예를 들어 출력해보겠다.
캡쳐에는 짤렸으나 한 데이터를 불러들여와서 card로 테이블을 저장하였다.
여기서 여러 열 중 식료품 열을 불러왔을 때 콤마(,) 와 쌍따옴표("")로 묶여진 데이터가 있는 것을 확인하였다.
이 뜻은 출력된 데이터가 문자라는 의미이다.
식료품들의 합을 구하려면, 데이터 타입은 숫자여야하기 때문에 숫자로 변환하기 위해서는 먼저 콤마를 지워주었다(str_replace). 그 후에 as.numeric 함수를 사용하여 출력하니 쌍따옴표가 사라져 출력되었다.
이 값을 바로 sum에 넣으니 합계가 출력이 되었다.
연습문제 세 가지를 풀어보자.
1. 2023년 11월 01일을 날짜로 인식 처리
2023-11-01은 문자이므로 날짜로 인식(파싱)이 필요하다.
2. 2023년 1월 1일로부터 100일 뒤 날짜의 요일 출력
3. 오늘 날짜와 2023년 1월 1일 날짜 사이의 일수 출
둘의 차이를 구한 타입은 difftime이라는 타입이 나왔다.
여기까지 R의 형변환
'배우기 > 복습노트[R과 분석]' 카테고리의 다른 글
[복습] R(programming language) 자료구조(데이터 프레임) (3) (0) | 2023.11.23 |
---|---|
[복습] R(programming language) 자료구조(벡터) (2) (0) | 2023.11.22 |
[복습] R(programming language) 연산자 정리 (0) | 2023.11.22 |
[실습문제] 2023. 11. 21.(화) (2문제) (0) | 2023.11.22 |
[복습] R(programming language) 의 자료구조(벡터, 데이터 프레임) + 복습후기(20231121) (0) | 2023.11.21 |