R 프로그래밍 기초

과목: 데이터 분석 (3과목, 35번 주제) ·

키워드: 빅데이터 3V/5V · 회귀분석 · 시계열 분석 · 군집분석 · R 프로그래밍 · 데이터 전처리

정의: R 언어 특징 R은 통계 분석과 시각화에 특화된 오픈소스 프로그래밍 언어입니다.

R 언어 특징 R은 통계 분석과 시각화에 특화된 오픈소스 프로그래밍 언어입니다. - 벡터화 연산: 반복문 없이 벡터 단위로 연산 수행 - 오픈소스: CRAN에서 15,000개 이상의 패키지 제공 - 통계/시각화 특화: 회귀분석, 군집분석, 시계열 분석 등 내장 기본 데이터 타입 타입 설명 예시 벡터(Vector) 동일 타입 원소의 1차원 집합 c(1, 2, 3) 행렬(Matrix) 동일 타입의 2차원 구조 matrix(1:6, nrow=2) 데이터프레임(Data Frame) 열마다 다른 타입 허용, 표 형태 data.frame() 리스트(List) 서로 다른 타입 원소 허용 list(1, "a", TRUE) 팩터(Factor) 범주형 변수, 레벨 보유 factor(c("남","여")) 주요 패키지 - ggplot2: 그래머 오브 그래픽스 기반 시각화 - dplyr: 데이터 조작 및 변환 - tidyr: 데이터 구조 정리(wide↔long 변환) - caret: 머신러닝 모델 학습/평가 통합 기본 문법 - 변수 할당: x <- 10 (화살표 연산자) - 파이프 연산자: %% (magrittr/dplyr), 왼쪽 결과를 오른쪽 함수의 첫 인자로 전달 - dplyr 주요 함수: filter() 행 필터링, select() 열 선택, mutate() 변수 생성, groupby() 그룹화, summarise() 집계 R 기본 자료형 (Atomic Types) 자료형 설명 예시 numeric 정수·실수 1, 3.14 integer 정수 (L 접미사) 5L character 문자열 "ADsP" logical 논리형 TRUE, FALSE complex 복소수 1+2i 결측값(Missing Value) 4종류 표현 의미 발생 예 NA Not Available, 결측값 응답 누락 NULL 객체 자체가 없음 빈 리스트 원소 NaN Not a Number, 정의 불가 0/0, log(-1) Inf / -Inf 양·음 무한대 1/0 결측 검사: is.na(), is.null(), is.nan(), is.infinite(). NA는 is.na()=TRUE이지만 NaN도 is.na()=TRUE임에 주의. apply 계열 함수 (반복문 대체) 함수 입력 출력 용도 apply(X, MARGIN, FUN) 행렬/배열 벡터/행렬 행(1)·열(2) 단위 적용 sapply(X, FUN) 벡터/리스트 벡터/행렬 (단순화) 각 원소에 함수 적용 lapply(X, FUN) 벡터/리스트 리스트 결과를 리스트로 보존 mapply(FUN, ...) 다중 인자 벡터/행렬 sapply의 다변수 버전 tapply(X, INDEX, FUN) 벡터+그룹 그룹별 집계 groupby + summarise 시험 포인트: apply(m, 1, sum) = 행 합계, apply(m, 2, sum) = 열 합계. 결과 자료구조 차이(sapply=벡터, lapply=리스트)가 자주 출제됩니다. apply 함수 계열 - apply(X, MARGIN, FUN): 행렬·배열에 함수 적용. MARGIN=1 행, 2 열 - sapply(X, FUN): 리스트·벡터에 적용, 가능하면 벡터·행렬로 단순화 반환 - lapply(X, FUN): 리스트로 반환 - vapply(X, FUN, FUN.VALUE): sapply에 반환형 명시 — 더 안전 - mapply(FUN, ...): 다중 인자 sapply - tapply(X, INDEX, FUN): 그룹별 함수 적용 자료구조와 변환 - vector / list / matrix / array / data.frame / factor: R의 6대 자료형 - array: 다차원 배열 — array(data, dim=c(...)) - factor: 범주형 변수 — 수준(levels) 관리 - cbind / rbind: 열·행 결합 - merge: 데이터프레임 조인 (by 기준) - subset: 조건으로 부분 추출 dplyr 핵심 동사 - filter(): 행 선택, select(): 열 선택 - mutate(): 새 변수 생성, summarise(): 요약 통계 - groupby(): 그룹화, arrange(): 정렬 - %% (pipe): 왼쪽 결과를 오른쪽 함수의 첫 인자로 전달 - plyr의 ddply(): 데이터프레임을 그룹화하여 함수 적용 후 데이터프레임 반환 - ldply / dlply / llply: 입력/출력 형태별 변형 I/O와 패키지 관리 - read.csv / read.table / readr::readcsv: 파일 읽기 - write.csv / write.table: 파일 쓰기 - install.packages("패키지명"): 패키지 설치 - library(패키지명): 패키지 로드 통계·모델 함수 - lm() / glm() / aov(): 선형·일반화선형·분산분석 모형 - predict(): 예측 - summary() / str() / head() / tail(): 객체 요약·구조·앞뒤 미리보기 - scale(): 표준화, prcomp() / princomp(): PCA, factanal(): 요인분석 - kmeans() / hclust() / cutree(): 군집분석 - t.test / cor.test / chisq.test / wilcox.test / shapiro.test: 통계 검정 R 조건·논리 함수 - ifelse(조건, 참값, 거짓값): 벡터의 각 원소에 조건을 적용해 결과 벡터 반환 — 벡터화 작동 - 예: ifelse(x 0, "양수", "비양수") - 일반 if-else 문은 단일 논리값에만 적용 - dplyr::casewhen(): 다중 조건을 처리하는 더 표현력 있는 대안 - casewhen(x 0 "pos", x < 0 "neg", TRUE "zero") R SQL 인터페이스 - sqldf 패키지: 데이터프레임에 직접 SQL 쿼리 실행 - 예: sqldf("SELECT FROM df WHERE age 30 ORDER BY name") - 내부적으로 SQLite 사용 — DB 경험자에 친숙 - 대용량은 느림, 비교: dplyr이 R 친화적·빠름 tidyverse 생태계 - tidyverse: 일관된 철학으로 만들어진 R 패키지 모음 (Hadley Wickham) - dplyr: 데이터 조작 (filter·select·mutate·summarise·groupby·arrange) - tidyr: 데이터 정돈 (pivotlonger·pivotwider·separate·unite) - ggplot2: 그래픽 문법 시각화 - readr: 파일 읽기 (readcsv·readtsv) - stringr: 문자열 처리 - lubridate: 날짜·시간 처리 - forcats: 범주형 변수 - purrr: 함수형 프로그래밍 고성능 R 패키지 - data.table 패키지: 대용량 데이터 빠른 처리 — DT[i, j, by] 문법, 인메모리 최적화 - reshape2: melt(긴 형태)·cast(넓은 형태) — tidyr 이전 표준 - plyr 패키지: 분할-적용-결합(Split-Apply-Combine)의 시초 — ddply·llply·dlply - Rcpp / RcppArmadillo: R에서 C++ 함수 호출 — 성능 가속 - foreach + doParallel: 병렬 반복 처리 - require() / library(): 패키지 로드 — require는 실패해도 경고만, library는 오류 발생 데이터 변형 (Reshape) - melt(reshape2/data.table): Wide 형식을 Long 형식으로 변환 (열을 행으로 펼침) - 예: 연도별 컬럼 → 연도 컬럼 + 값 컬럼 - dcast(): Long → Wide 변환 (cast) - pivotlonger() / pivotwider() (tidyr): 최신 dplyr 계열 reshape 함수 - gather() / spread() (구 tidyr): 이전 버전의 reshape 함수 Wide vs Long 데이터 - Wide 형식: 변수마다 컬럼 (한 행에 여러 측정값) — 사람이 읽기 쉬움 - Long 형식: 측정값마다 행 (key-value 구조) — ggplot2·통계 분석에 적합 - ML/시각화는 Long 형식을 선호 📝 이 주제 관련 문제 학습 노트의 보강 개념을 직접 문제로 풀어보세요. - vapply — sapply에 반환형 명시 — 더 안전 - array — 다차원 배열 — array(data, dim=c(...)) - factor — 범주형 변수 — 수준(levels) 관리 - filter() — 행 선택, select(): 열 선택 - mutate() — 새 변수 생성, summarise(): 요약 통계 - groupby() — 그룹화, arrange(): 정렬 - %% — 왼쪽 결과를 오른쪽 함수의 첫 인자로 전달 - plyr의 ddply() — 데이터프레임을 그룹화하여 함수 적용 후 데이터프레임 반환 - require() / library() — 패키지 로드 — require는 실패해도 경고만, library는 오류 발생 페이지 하단 "이 주제 문제 풀기" 버튼으로 전체 문제를 풀 수 있습니다.

핵심 Q&A (8개)

R의 기본 데이터 구조 5가지는?
벡터(Vector), 행렬(Matrix), 데이터프레임(Data Frame), 리스트(List), 팩터(Factor)
ggplot2 패키지의 용도는?
그래머 오브 그래픽스(Grammar of Graphics) 기반의 시각화 패키지. 레이어 방식으로 그래프를 조합하여 다양한 고품질 차트 생성
dplyr의 주요 함수 5가지는?
filter(): 행 필터링
select(): 열 선택
mutate(): 새 변수 생성
group_by(): 그룹화
summarise(): 집계 계산
R에서 파이프 연산자(%>%)의 역할은?
왼쪽 표현식의 결과를 오른쪽 함수의 첫 번째 인자로 전달. 코드 가독성 향상. 예: df %>% filter(x>0) %>% summarise(mean(y))
팩터(Factor)란 무엇인가?
범주형 변수를 표현하는 R의 데이터 타입. 레벨(Level)이라는 고정된 값의 집합을 가지며, 회귀분석 시 자동으로 더미 변수로 변환됨
R의 결측값 4종류와 차이는?
NA: 결측(존재하지만 값 없음)
NULL: 객체 자체가 없음
NaN: 정의 불가 (0/0)
Inf: 무한대 (1/0)
is.na(NaN)도 TRUE인 점 주의
apply / sapply / lapply의 출력 차이는?
apply(X, MARGIN, FUN): 행(1)·열(2) 단위 적용
sapply: 벡터/행렬로 단순화
lapply: 항상 리스트로 반환
tapply: 그룹별 집계
R 기본 자료형 5가지는?
numeric(실수), integer(정수L), character(문자열), logical(TRUE/FALSE), complex(복소수)

이 주제의 관련 기출 퀴즈 풀기 »