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는 오류 발생 페이지 하단 "이 주제 문제 풀기" 버튼으로 전체 문제를 풀 수 있습니다.
R 프로그래밍 기초
과목: 데이터 분석 (3과목, 35번 주제) ·
키워드: 빅데이터 3V/5V · 회귀분석 · 시계열 분석 · 군집분석 · R 프로그래밍 · 데이터 전처리
정의: R 언어 특징 R은 통계 분석과 시각화에 특화된 오픈소스 프로그래밍 언어입니다.
핵심 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(복소수)