본문 바로가기

배우기/복습노트[R과 분석]

[복습] R(programming language) 변수 생성 및 형 변환 함수(as.character, as.numeric, as.Date, strftime, strptime)

728x90
반응형

변수란 값을 저장하여 선언하는 객체이다.

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 이렇게는 불가하다.

 

 

728x90

 

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의 형변환 

728x90
반응형