01. 환경 구성 및 설치
02. 기본 경로 설정
03. 기본 설정 및 단축키
01. 환경 구성 및 설치
R 설치 : https://cran.r-project.org/
R-studio 설치 : https://posit.co/
Posit | The Open-Source Data Science Company
The best data science is open source. Posit is committed to creating incredible open-source tools for individuals, teams, and enterprises.
posit.co
java 설치 : https://www.java.com/
Java | Oracle
Oracle Java is the #1 programming language and development platform. It reduces costs, shortens development timeframes, drives innovation, and improves application services. Java continues to be the development platform of choice for enterprises and develo
www.java.com
** 인코딩의 경우 CP949로 선택한다.
02. 기본 경로 설정
R 설치 경로 확인 -> 시스템 환경 변수 편집 -> R 설치 경로 추가 -> 실행 창에서 R 실행 여부 확인

R 설치 경로 확인



시스템 환경 변수 편집

R 설치 경로 추가

실행 창에서 R 실행 여부 확인
03. 기본 설정 및 단축키
# 현재 작업 디렉토리 확인
getwd()

# 작업 디렉토리 변경은 setwd()로 진행하나, 매번 리셋되므로 rstudio 내에서 기본 경로로 변경 진행하는 것이 편하다.
Tools->Global option->Default Working Directory


지정해놓은 기본 경로에서 바로 실습파일을 불러올 수 있다.
setwd()
read.csv('emp.csv')

# 패키지
패키지는 함수의 묶음이며, R은 내장함수뿐 아니라 다양한 외부 패키지의 함수를 사용하는 구조이다.
패키지는 최초 한 번만 설치를 진행하며 이후 사용할 패키지를 부착한다.
install.packages()
install.packages('stringr') # 패키지 설치
library(stringr) # 패키지 부착
install.packages('rJava')
library(rJava)
# 패키지 내 함수목록 확인
ls('package:stringr')

ls('package:rJava')

# Java 설치 후 rJava 로딩 안되는 경우는 다음 세 가지 방법을 통해 해결이 가능하다. :
1. Rstudio 재시작
2. 컴퓨터 재시작
3. 수동으로 자바 PATH 등록(시스템 환경 변수의 PATH에 자바 설치 위치 등록)
# Rstudio 단축키
| Ctrl + shift + C | 주석 처리 및 해제 |
| Ctrl + O | 파일 열기 |
| Ctrl + S | 파일 저장 |
| Ctrl + Enter | 실행 |
| Ctrl + +/- | 화면 확대 / 축소 |
| Ctrl + Shift + N | 새 편집기 열기 |
| Alt + - | <- 입력 |
| Ctrl + Shift + M | %>% 입력 |
| Ctrl + Shift + U | 소문자 변환 |
# 단축키 설정
기존에 사용하던 단축키를 삭제 / 변경 이후 진행한다.
Tools -> Modify Keyboard Shortcuts -> 검색창에 upper 입력 후 등록 (yank 검색 후 ctrl+d로 변경 필요)


# R
- 인터프리터 언어(한 줄 단위로 실행하는 언어)
- 변수 선언 가능
# 변수
- 명령어 결과 혹은 상수에 이름을 붙여 저장하는 역할
- 같은 변수에 다른 값을 덮어쓸 수 있음
- ' <- ' 또는 ' = ' 변수 선언 ( <- 사용 권고)
a1 <- 2*100*8*10
a1+100
a1 <- 600
a1 = 600 # =는 변수 선언
a1 == 600
일치여부는 '=='로 물어봐야함
# 변수의 명명규칙
1. 숫자 시작 불가
2. 특수기호 포함 불가(_제외, . 사용 지양)
3. 예약어 사용 자제
4. 한 자리 이름 사용 자제
1. 생성
문자상수 전달 시 ' ' 또는 " " 사용
var1 <- 100
var2 <- 200
var3 <- 'abc'
var4 <- "abc"
var5 <- Sys.Date()
2. 활용
숫자상수를 갖는 변수끼리의 연산
var1 + var2
날짜상수와 숫자상수 +/- 가능(100일 후)
var5 + 100
3. 타입 확인
class(var1) # "numeric"
class(var3) # "character"
class(var5) # "Date"
4. 형 변환 함수
1) 문자로 변경
as.character(100)
error (묵시적 형 변환이 발생하지 않는다.)
'100' + 1
2) 숫자로 변경
as.numeric('100') + 1
3) 날짜로 변환(날짜 파싱)
as.Date('2026/01/01') # 날짜로 변경(포맷 생략 시 연-월-일 순서대로 해석함)
as.Date('12/05/15') # '0012-05-15' (두 자리 연도 해석이 애매함)
as.Date('12/05/15', '%y/%m/%d') # '2012-05-15' (올바른 포맷 전달 필요)
strptime(x, # 대상
format = ) # 포맷(생략 불가)
strptime('12/05/15') # error
strptime('12/05/15', '%y/%m/%d') # 포맷 전달 필수!

활용 예)
error (날짜처럼 생긴 문자상수와 숫자상수의 연산 불가)
'2026/03/30' + 100
날짜처럼 생긴 문자상수를 먼저 날짜로 변환 필요
date1 <- as.Date(x= '2026/03/30')
class(date1)
date1 + 100
[ 날짜 포맷 ]
| %y | 두 자리 연도 (00 to 68 are prefixed by 20 and 69 to 99 by 19) |
| %Y | 네 자리 연도 |
| %m | 두 자리(숫자) 월 |
| %d | 두 자리(숫자) 일 |
| %H | 시 |
| %M | 분 |
| %S | 초 |
| %A | 요일 (문자형식으로 출력) |
| %w | 요일 (숫자, 일요일 : 0, 월요일 : 1...) |
# 날짜 포맷 변경
as.Character(Sys.Date(), '%Y') # error
* 과거 버전에서는 가능했었으나 현재는 불가능
| 문자 | --- to_date (파싱) ---> | 날짜 |
| <--- to_char (포맷 변경) --- |
strptime : 날짜 파싱(문자 -> 날짜)
help(strftime)
strftime(x, # 변환대상(날짜타입)
format = ) #포맷
strftime(Sys.Date(), '%A') # '월요일'
strftime(Sys.Date(), '%Y') # '2026'
strftime(Sys.Date(), '%Y')-10 # error (문자타입)
as.numeric(strftime(Sys.Date(), '%Y')) - 10
# strftime : 날짜 포맷 변경(날짜 -> 문자)
# 함수 메뉴얼
help(as.Date)
##### [ 연습문제 ]
# 1) '2026/01/25' 를 date1 변수 선언
date1 <- '2026/01/25'
# 2) 오늘날짜와 '2026/01/25' 까지의 일(day)수 출력
Sys.Date() - date1 # error
Sys.Date() - as.Date(date1, '%Y/%m/%d')
class(date1)
class(Sys.Date() - date1) # error
date1 <- as.Date(date1, '%Y/%m/%d')
class(Sys.Date() - date1) # difftime(날짜-날짜의 리턴 타입)
as.numeric(Sys.Date() - date1) # 숫자타입으로 변경 가능
# 3) '2026/01/25' 날짜의 요일 출력
strftime(date1,'%A')
# [ 참고 - 날짜 언어 변경 ]
** 기본적으로 날짜 언어가 "한국어"로 세팅됨
Sys.getlocale() # 기본 세팅 확인
strftime(Sys.Date(), '%B') # 3월(March)
strftime(Sys.Date(), '%b') # 3(Mar)
strftime(Sys.Date(), '%A') # '월요일(Monday)'
Sys.setlocale("LC_TIME", "C") # 영어로 변경
Sys.setlocale("LC_TIME", "Korean_Korea.utf8") # 한글로 변경
# R의 자료구조
0. 스칼라(상수)
'a'
"abc"
100
NA # 결측치(미정,) 표현 방식
NULL # 0 길이의 대상
1. 벡터
- 1차원(여러 개의 상수가 모인 자료구조)
- 단 하나의 데이터타입만 허용
- c로 생성
a1 <- 1 # 스칼라
a2 <- c(1,2,3) # 벡터
a3 <- c(1,2,3,'a')
class(a1) # numeric
class(a2) # numeric(벡터를 구성하는 요소들의 데이터타입이 리턴됨)
class(a3) # character
length(a1) # 상수는 1로 리턴
length(a2) # 벡터의 원소의 수 리턴
# 색인(indexing)
a2[1] # positional indexing
a2[1:2] # slice indexing
a2[1,3] # error
a2[c(1,3)] # 첫번째와 세번째 원소 추출
names(a2) # 벡터의 원소 이름 확인
names(a2) <- c('a','b','c') # 벡터의 원소 이름 부여
names(a2)
a2['a'] # label indexing
a2[c('a','c')] # label indexing(여러개 추출 가능)
a2['a':'b'] # label indexing의 경우 slice로 연속적인 추출 불가
a2[-1] # - 는 제외의 의미를 가진다. (첫 번째 원소 제외)
a2[3:1] # reverse indexing
a3 <- 1:10
a3[a3 > 5] # 조건에 만족하는 대상만 추출 가능
# 데이터 프레임
- 2차원 구조(RDBMS의 테이블과 유사)
- 각 컬럼(열) 별로 서로 다른 데이터 타입 전달 가능
- 하나의 열에는 같은 데이터 타입만 전달 가능
getwd()
emp <- read.csv('emp.csv')
emp
class(emp)
str(emp) # 각 컬럼별 데이터 타입 확인(구조보기)
head(emp) # 앞에서 6개 행만 출력
length(emp) # 컬럼의 수 출력
nrow(emp) # 행의 수 출력
ncol(emp) # 컬럼의 수 출력
3. 색인
데이터프레임[행 선택, 컬럼 선택]
emp[1,1] # 행과 열의 위치로 선택
emp[1,] # 출력할 컬럼을 선택하지 않으면 기본적으로 전체 컬럼이 선택됨
emp[,1] # 출력할 행을 선택하지 않으면 기본적으로 전체 행이 선택됨(벡터 출력)
emp[1] # 첫번째 컬럼 선택(데이터 프레임 출력)
emp$EMPNO # Key indexing(특정 컬럼 하나 선택)
emp[1,c(1,2,6,7)] # 첫 번째 행의 1,2,6,7번째 컬럼 선택
emp[1,c('EMPNO','ENAME','SAL','COMM')] # 컬럼 이름 전달 가능
emp[1:5, c('EMPNO','ENAME','SAL','COMM')] # 1~5번 라인 선택택
head(emp)
# 급여가 3000 이상인 행 선택?
emp$SAL >= 3000
# 급여가 3000 이상인 직원의 사번, 이름, 급여 출력
emp[emp$SAL>=3000, c('EMPNO','ENAME','SAL')]
head(emp)
# 10번 부서원의 이름, 급여, 부서번호 출력
emp['DEPTNO']
emp[, 'DEPTNO']
emp[emp$DEPTNO == 10, c('ENAME','SAL','DEPTNO')]
emp[ ...... , c(F,F,F,F,F,F,T,T)]
4. 논리연산자
AND, OR, NOT
v1 <- 1:10
v1 > 3 and v1<=7 # error (and 연산자 사용 불가)
v1 >= 3 or v1<=7 # or 사용 불가
v1 >= 3 & v1 <= 7 # and -> & 로 변경
v1 >= 3 | v1 <=7 # or -> | 로 변경
!(v1 >= 3) # not 연산자
5. 기타 연산자
1) 포함연산자
%in%
v1 %in% c(3,5)
v1
6. 수정
1) 값 수정 : 수정범위선택 <- 수정값
emp$DEPTNO <- 10
emp[2, 'COMM'] <-3000
emp[1:3, 'SAL'] <- c(1000,2000,3000)
emp
2) 컬럼 추가
emp$NEW_SAL <- emp$SAL * 1.1
emp[,c('SAL', 'NEW_SAL')]
##### [ 연습문제 ]
# 1) emp에서 이름이 SMITH 또는 ALLEN의 이름, 부서번호, 급여 출력
head(emp)
emp[(emp$ENAME == 'SMITH') | (emp$ENAME == 'ALLEN'), c('ENAME','DEPTNO','SAL')]
emp[emp$ENAME %in% c('SMITH', 'ALLEN'),c('ENAME','DEPTNO','SAL')]

# 2) 10번 또는 30번 부서원의 사번, 이름, 입사날짜, 부서번호 출력
head(emp)
emp[(emp$DEPTNO == 10) | (emp$DEPTNO == 30), c('EMPNO','ENAME','HIREDATE','DEPTNO')]

##### [ 연습문제 ]
emp<-read.csv('emp.csv')
# 1) 급여가 3000 미만인 직원들의 이름, 부서번호, 급여 출력, 입사요일 출력
| 파싱 | 포맷변경 | |||
| 문자열(날짜형태) | ----------> | 날짜 | ----------> | 문자 |
| as.Date, strptime | strftime |
# STEP 1) HIREDATE 컬럼을 날짜타입으로 변환
emp$HIREDATE <- as.Date(emp$HIREDATE)
str(emp)
# STEP 2) 포맷변경(요일출력) 후 새로운 컬럼 저장
emp$DAY <- strftime(emp$HIREDATE, '%A') # R에서는 자동으로 날짜로 해석함(Python은 x)
# STEP 3) 대상선택
emp[emp$SAL < 3000, c('ENAME','DEPTNO','SAL','DAY')]

7. 형 확인 함수
is.character(100)
is.numeric('a')
is.vector(emp)
is.na()
[ NA 확인 및 치환 ]
v1 <- c(1, NA, 0, 100, NA, 2, 10, NA, 40)
1) NA 확인
is.na(v1)
!is.na(v1)
2) NA 개수 확인
sum(is.na(v1))
3) NA 선택
v1[is.na(v1)]
4) NA 수정
v1[is.na(v1)] <- 0
v1
'아이티윌_데이터 분석 55기 > 강의내용 필기_통계 및 분석' 카테고리의 다른 글
| #6 6일차 : 외부파일 입출력, DB Connection, 기타 기능 (0) | 2026.04.07 |
|---|---|
| #5 5일차_적용함수, 자료구조 (0) | 2026.04.03 |
| #4 4일차_집합연산자, 조건문, 반복문, 사용자 정의 함수, 적용함수 (0) | 2026.04.02 |
| #3 3일차_그룹핑, 조인, 정렬 (0) | 2026.04.01 |
| #2 2일차_벡터, 데이터 프레임, 문자열 함수 (0) | 2026.03.31 |