Diary, Data, IT

[TIL] 11일차 TIL(20230220) - R 기초 본문

STARTERS/TIL

[TIL] 11일차 TIL(20230220) - R 기초

라딘 2023. 2. 20. 14:50

 

 

[TIL] 11일차 TIL(20230220) - R 기초

 

 


1. working directory 설정

- getwd() : 현재의 wd확인
- dir() : wd 내의 자료들 확인
- setwd('경로'): 경로를 입력하여 새로운 wd지정


2. 단축키 모음
- Ctrl + S : 파일 저장
- Ctrl + O : 파일 불러오기
- Ctrl + Shift + N: 새 소스파일
- Ctrl + Shift + C: 코드 주석화
- Ctrl + Shift + Enter: 소스코드 실행
- Shift + Alt + K: 모든 단축키 확인


3. 데이터 타입
- 숫자형(Numeric): 숫자를 나타내는 데이터 타입, 실수형 타입이지만 정수를 입력해도 우선 Numeric으로 처리
- 정수형(Integer): 정수값만을 나타내는 데이터 타입, 숫자형에 비해 메모리를 적게 차지함
객체 타입을 Integer로 지정하려면 값 뒤에 'L' 기입
- 논리형(Logical): 참/거짓을 나타내는 데이터 타입, TRUE/FALSE
- 문자형(Character): 문자 또는 문자열을 나타내는 데이터 타입
- Inf(Infinity): 무한히 큰 값을 나타내는 데이터 객체, 일반적인 계산에 사용가능
- NA: 결측값을 나타내는 데이터 객체
- NaN: 수치값으로 표현할 수 없는 값을 나타내는 데이터 객체 ex) 0/0
결측값으로 처리됨


4. R 자료구조

4.1 벡터
- 1차원 구조
- 데이터 타입이 동일한 값들의 모음
- 서로 다른 데이터 타입을 넣는다면 자동 형변환이 일어남
- c()함수를 통해 생성
ex) c(0.5, 0.6, 1, -5)
-  vector('데이터 타입', length = 벡터 크기): 해당 데이터 타입과 크기를 가지는 벡터에 기본값을 넣어 생성

4.2 행렬
- 벡터의 집합, 2차원 구조
- 행과 열로 구성
- matrix(vector, nrow = 행크기, ncol = 열크기): 벡터를 지정하지 않으면 값이 빈 행렬이 만들어짐
- byrow = FALSE(default): 값을 행부터 채울지의 여부를 지정할 수 있음


4,3 배열(Array)
- dim(차원 크기)이 2이상인 자료구조
- array(vector, dim = (차원크기)): 차원크기가 3차원의 3행 3열이라면 (1, 3, 3)꼴로 작성
- Matrix는 dim크기가 2인 array


4.4 리스트(List)
- 서로 다른 데이터 타입이 존재하는 값들의 모음
- list()


4.5 데이터프레임
- List의 집합으로 행,열로 구성
- 각 행은 list, 각 열은 vector로 취급됨
- 열 별로 다른 데이터 타입 저장 가능
- data.frame(vector1, vector2, ...): 벡터별로 하나의 열, 벡터명이 칼럼명으로 사용


5. NULL vs NA
- NULL: 값을 넣고싶지 않고, 빈 객체를 선언만 하고 싶을 때 사용하는 타입
- NA: 값이 존재해야 하는 공간에 값이 없을 때 사용하는 타입


6. 내장함수

6.1 as함수
- 데이터 형식을 강제로 변환시키는 함수
- as.numeric, as.character. as.logical
- 데이터 우선순위가 낮은 타입 -> 높은 타입으로 변화는 모두 가능
- 데이터 우선순위가 높은 타입 -> 낮은 타입으로 변화는 일부 가능
  ex) 0초과의 수 = T, 0이하의 수 = F
- 데이터 우선순위: character > numeric > logical

6.2 데이터 생성 함수
- seq(length, from, by): from부터 by씩 증가하는 length개의 숫자로 이루어진 벡터 생성
- rnorm(n, mean, sd): 평균이 mean, 표준편차가 sd인 정규분포를 따르는 n개의 숫자로 이루어진 벡터 생성
- runif(n, min, max): [min, max]범위 사이의 n개의 난수로 이루어진 벡터 생성

 

7. 실습 예제

age <- c(30, 33, 35, 30, 68, 33) # 나이 벡터 생성
job <- c("무직", "서비스", "관리직", "관리직", "은퇴", "관리직") # 직업 벡터 생성
marital <- c("결혼", "결혼", "미혼", "결혼", "사별", "결혼") # 결혼 유무 벡터 생성
balance <- c(1787, 4789, 1350, 1476, 4189, 3935) # 은행 잔고 벡터 생성
campaign <- c("휴대폰", "휴대폰", "휴대폰", "Unknown", "유선전화", "휴대폰") # 상담 매체 벡터 생성
y <- c(F, F, F, F, T, T) # 상담 결과 벡터 생성
result <- data.frame(age, job, marital, balance, campaign, y) #데이터 프레임 생성
print(result)


1) job칼럼의 은퇴를 무직으로 대체하고,
2) marital 칼럼을 logical값으로 관리하기(결혼 값은 T, 나머지 값은 F)
3) 수정된 결과물은 result_new에 담아 출력

 

install.packages('stringr')
library(stringr)

job_new = str_replace(job, '은퇴', '무직')

marital_new = str_replace(marital, '결혼', 'T')
marital_logical = as.logical(marital_new)  # 논리형으로 변
marital_logical[is.na(marital_logical)] = FALSE  #결측치 값을 FALSE로 변경

result_new <- data.frame(age, job_new, marital_logical, balance, campaign, y)

 


 

소감 및 정리

R을 오랜만에 다시 다뤄봤는데 문법들이 어렴풋하게 기억이 나는 것 같으면서도 새롭게 느껴졌다. 특히 벡터를 c()로 감싸서 지정해주는 문법을 완전 잊고 있었다는 사실이 약간 충격이었다ㅎㅎ.. R에서 정말 기초적인 내용인데 오랫동안 쓰지 않다보니 기본기가 많이 무너진 것 같았다ㅠㅠ 오늘 강의를 수강하며 기초적인 내용을 충실히 다지는 계기가 되었고, 다시 손에 약간 익기 시작했다. 내일은 본격적으로 R을 사용하는 법에 대해 배워서 더 기대가 된다.