flowchart TD
subgraph Tooling["사용자 개발 환경"]
IDE["RStudio Desktop (작업실)<br>코드 작성, 플롯 미리보기, 환경 관리"]
end
subgraph CoreEngine["핵심 연산 환경"]
R["R Core Engine (엔진)<br>CRAN 배포 통계 연산 및 기본 런타임"]
end
subgraph Packages["데이터 사이언스 라이브러리"]
Tidy["tidyverse 생태계"]
Tidy --> Dplyr["dplyr<br>(데이터 정제·가공)"]
Tidy --> Ggplot["ggplot2<br>(시각화)"]
Tidy --> Tidyr["tidyr<br>(형태 변환)"]
Tidy --> Readr["readr/readxl<br>(데이터 수집)"]
end
IDE -->|통신 및 스크립트 실행| R
R -->|패키지 로드| Packages
style IDE fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
style R fill:#fff3e0,stroke:#e65100,stroke-width:2px
style Tidy fill:#f1f8e9,stroke:#33691e,stroke-width:2px
style Dplyr fill:#e8f5e9,stroke:#2e7d32
style Ggplot fill:#e8f5e9,stroke:#2e7d32
style Tidyr fill:#e8f5e9,stroke:#2e7d32
style Readr fill:#e8f5e9,stroke:#2e7d32
이 글을 읽으면 컴퓨터에 R과 RStudio를 충돌 없이 설치하고, dplyr의 필수 데이터 조작 함수(filter, select, mutate, summarise, group_by)와 결측치(NA) 정제 코드를 10분 만에 직접 실행해 볼 수 있습니다.
0. 이 글의 목표
이 글은 R을 처음 설치하는 단계부터, 기본 데이터셋을 이용한 데이터 조작, NA 처리, across/c_across/pick 같은 실무 함수까지 하나하나 따라할 수 있도록 구성했습니다. 긴 글이지만 순서대로만 따라 하면 실습이 끝나는 구조입니다.

1. R이란 무엇인가 (1분 요약)
- R은 통계 분석과 데이터 처리를 위한 프로그래밍 언어입니다.
- RStudio는 R을 편하게 쓰게 도와주는 IDE(개발 환경)입니다.
목표는 단순합니다. R(엔진) + RStudio(작업실) + 필수 패키지(도구) 를 설치하고, 기본 데이터셋으로 연습하는 것.
1.1 R 데이터 분석 에코시스템 구조
2. R 설치 (Windows / macOS / Linux)
2.1 Windows 설치 (가장 흔한 방법)
R 설치는 CRAN(Comprehensive R Archive Network)에서 받는 것이 표준입니다. 공식 문서는 Windows에서 설치 파일(.exe)을 실행해 설치하는 방식을 안내합니다.
순서
1) CRAN의 Windows 다운로드 페이지에서 R 설치 파일(.exe) 다운로드
2) 설치 파일 실행 → 안내에 따라 설치
3) 설치 후 R 콘솔 또는 RStudio에서 버전 확인
설치 후 버전 확인
version예시 출력(버전은 설치 환경에 따라 다를 수 있습니다):
_
platform x86_64-w64-mingw32
arch x86_64
os mingw32
system x86_64, mingw32
status
major 4
minor 4.1
year 2026
month 01
day 10
language R
2.2 macOS 설치
macOS는 CRAN 페이지에서 설치 파일(.pkg)을 다운로드해 설치합니다. 공식 문서는 Mac에서도 설치 파일을 더블클릭해 설치한다고 설명합니다.
설치 후 확인
version예시 출력(버전은 설치 환경에 따라 다를 수 있습니다):
_
platform aarch64-apple-darwin20
arch aarch64
os darwin20
system aarch64, darwin20
status
major 4
minor 4.2
year 2026
month 02
day 28
language R
2.3 Linux 설치
Linux는 배포판별 설치 방식이 다르지만, CRAN을 통해 최신 버전을 설치하는 것이 일반적입니다. R 공식 문서에서는 CRAN에서 소스 또는 바이너리를 얻을 수 있음을 안내합니다.
3. RStudio 설치
RStudio는 Posit에서 제공하며, Windows/macOS/Linux용 설치 파일을 공식 다운로드 페이지에서 제공합니다.
설치 후 첫 실행 시 확인할 것 - 좌측 상단: 스크립트 에디터 - 좌측 하단: 콘솔 - 우측 상단: Environment (객체 목록) - 우측 하단: Files/Plots/Packages/Help
4. 필수 패키지 설치 (tidyverse, readxl, janitor)
4.1 설치 코드
install.packages("tidyverse")
install.packages("readxl")
install.packages("janitor")4.2 로드 코드
library(tidyverse)
library(readxl)
library(janitor)팁: 한 번 설치하면 이후에는
library()로 불러오기만 하면 됩니다.
4-1. 실무 설치 팁 — Rtools, 환경변수, 패키지 경로 (Windows 필수)
윈도우 환경에서는 컴파일 도구(Rtools)와 환경변수(PATH) 문제가 가장 자주 발생합니다. 아래 순서를 그대로 따라 하면 대부분의 설치 이슈를 예방할 수 있습니다.
체크리스트 (Windows 기준)
- R Base 다운로드:
https://cran.r-project.org/bin/windows/base/접속 → 최신 설치 파일 다운로드
- R 설치 완료 확인: 설치 후 R 또는 RStudio에서 버전 확인
- Rtools 4.5 다운로드:
https://cran.r-project.org/bin/windows/Rtools/접속 → Rtools 4.5 설치 파일 선택
- RStudio 다운로드:
https://posit.co/downloads/접속 → RStudio Desktop 설치 파일 선택
- Rtools 4.5 설치 (예:
C:\rtools45) — 이 경로를 환경변수에 그대로 사용
- 시스템 환경변수에
RTOOLS45_HOME추가- Windows 검색창에 “환경 변수” 입력 → “시스템 환경 변수 편집” 클릭
- [환경 변수(N)…] 버튼 클릭
- 시스템 변수 영역에서 [새로 만들기(N)…] 클릭
- 변수 이름:
RTOOLS45_HOME
- 변수 값:
C:\rtools45(실제 설치 경로)
- 확인 → 확인
- Windows 검색창에 “환경 변수” 입력 → “시스템 환경 변수 편집” 클릭
- PATH에 Rtools 경로 추가
- 같은 창에서 시스템 변수 → Path 선택 → [편집]
- [새로 만들기] →
%RTOOLS45_HOME%\usr\bin\입력
- 확인 → 확인
- 같은 창에서 시스템 변수 → Path 선택 → [편집]
- RStudio 재시작 후 아래 코드로 경로 확인
Sys.getenv("RTOOLS45_HOME")
system("gcc --version")RStudio 경로 보강(필요 시)
환경변수가 잡혔는데도 컴파일이 실패한다면 아래를 추가로 적용합니다.
writeLines('PATH="%RTOOLS45_HOME%\\usr\\bin;${PATH}"', con = "~/.Renviron")5. R 기본 데이터셋으로 실습 시작
R에는 기본 내장 데이터셋이 있습니다. datasets 패키지에서 제공하며, iris, mtcars, airquality 같은 데이터가 대표적입니다.
5.1 데이터 목록 확인
data()예시 출력(일부만 표시):
AirPassengers BJsales ChickWeight CO2
airquality BOD co2 DNase
5.2 iris 데이터 불러오기
data(iris)
head(iris)
str(iris)예시 출력(head):
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
예시 출력(str):
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 ...
$ Species : Factor w/ 3 levels "setosa","versicolor","virginica": 1 1 1 1 1 1 ...
iris 데이터 특징 - 150개 행, 5개 열 - 꽃잎/꽃받침 길이와 품종 정보 포함
6. dplyr 기본 조작 (select, filter, mutate, summarise)
dplyr은 데이터 분석가가 머릿속으로 구상하는 정제 과정을 코드로 직관적으로 옮겨주는 데이터 가공 언어(Grammar of Data Manipulation)입니다. 파이프 연산자(%>%)를 활용해 각 단계를 물 흐르듯 연결합니다.
6.0 dplyr 5대 핵심 동사의 파이프라인 흐름
flowchart LR
Raw["원시 데이터<br>(Raw Data)"]
Filter["filter()<br>조건에 맞는 행 추출"]
Select["select()<br>필요한 열 선택"]
Mutate["mutate()<br>새 파생 변수 계산"]
GroupBy["group_by()<br>그룹별 범주 묶기"]
Summarise["summarise()<br>요약 통계량 산출"]
Result[["정제된 요약 통계<br>(Clean Insights)"]]
Raw --> Filter --> Select --> Mutate --> GroupBy --> Summarise --> Result
style Raw fill:#eeeeee,stroke:#616161
style Filter fill:#e1f5fe,stroke:#0288d1
style Select fill:#e1f5fe,stroke:#0288d1
style Mutate fill:#fff3e0,stroke:#f57c00
style GroupBy fill:#f3e5f5,stroke:#7b1fa2
style Summarise fill:#e8f5e9,stroke:#2e7d32
style Result fill:#c8e6c9,stroke:#1b5e20,stroke-width:2px
6.1 열 선택(select)
iris %>%
select(Sepal.Length, Species) %>%
head()예시 출력:
Sepal.Length Species
1 5.1 setosa
2 4.9 setosa
3 4.7 setosa
4 4.6 setosa
5 5.0 setosa
6 5.4 setosa
6.2 조건 필터(filter)
iris %>%
filter(Species == "setosa") %>%
head()예시 출력:
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
6.3 새로운 열 추가(mutate)
iris %>%
mutate(Sepal.Ratio = Sepal.Length / Sepal.Width) %>%
head()예시 출력(일부 열만 표시):
Sepal.Length Sepal.Width Sepal.Ratio
1 5.1 3.5 1.457143
2 4.9 3.0 1.633333
3 4.7 3.2 1.468750
4 4.6 3.1 1.483871
5 5.0 3.6 1.388889
6 5.4 3.9 1.384615
6.4 요약(summarise + group_by)
iris %>%
group_by(Species) %>%
summarise(
mean_sepal = mean(Sepal.Length),
mean_petal = mean(Petal.Length)
)예시 출력(소수점은 반올림 표시):
Species mean_sepal mean_petal
1 setosa 5.01 1.46
2 versicolor 5.94 4.26
3 virginica 6.59 5.55
7. NA 처리 (drop_na, fill, replace_na)
NA는 결측값입니다. R에서 결측값을 정리하는 데 tidyr 함수가 많이 쓰입니다.
7.1 NA가 있는 데이터 만들기
df <- tibble(
x = c(1, 2, 3, NA),
y = c(3, NA, 5, NA)
)예시 출력:
# A tibble: 4 × 2
x y
<dbl> <dbl>
1 1 3
2 2 NA
3 3 5
4 NA NA
7.2 drop_na(): NA가 있는 행 제거
df %>% drop_na()예시 출력:
# A tibble: 2 × 2
x y
<dbl> <dbl>
1 1 3
2 3 5
7.3 fill(): 위/아래 값으로 채우기
df2 <- tibble(
x = 1:4,
y = c(NA, 10, 20, NA)
)
# 위쪽 값으로 채우기
f1 <- df2 %>% fill(y, .direction = "up")
# 아래쪽 값으로 채우기
f2 <- df2 %>% fill(y, .direction = "down")예시 출력(f1):
# A tibble: 4 × 2
x y
<int> <dbl>
1 1 10
2 2 10
3 3 20
4 4 NA
예시 출력(f2):
# A tibble: 4 × 2
x y
<int> <dbl>
1 1 NA
2 2 10
3 3 20
4 4 20
7.4 replace_na(): 특정 값으로 채우기
df %>% replace_na(list(x = 0, y = 2))예시 출력:
# A tibble: 4 × 2
x y
<dbl> <dbl>
1 1 3
2 2 2
3 3 5
4 0 2
8. across / c_across / pick (실무에서 자주 헷갈리는 포인트)
8.1 across: 여러 열에 동일 함수 적용
iris %>%
mutate(across(where(is.numeric), ~ .x / 10)) %>%
head()예시 출력(일부 열만 표시):
Sepal.Length Sepal.Width Petal.Length
1 0.51 0.35 0.14
2 0.49 0.30 0.14
3 0.47 0.32 0.13
4 0.46 0.31 0.15
5 0.50 0.36 0.14
6 0.54 0.39 0.17
설명: across()는 여러 열에 같은 함수를 적용합니다. dplyr 공식 문서에서도 across는 mutate/summarise 안에서 다중 열을 처리하는 표준 방법이라고 설명합니다.
8.2 c_across + rowwise: 행 단위 계산
set.seed(1)
df <- tibble(id = 1:4, w = runif(4), x = runif(4), y = runif(4), z = runif(4))
df %>%
rowwise() %>%
mutate(
sum = sum(c_across(w:z)),
sd = sd(c_across(w:z))
)예시 출력(일부 열만 표시):
# A tibble: 4 × 7
id w x y z sum sd
<int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 0.266 0.898 0.206 0.498 1.87 0.311
2 2 0.372 0.945 0.177 0.717 2.21 0.344
3 3 0.573 0.661 0.687 0.991 2.91 0.181
4 4 0.908 0.629 0.384 0.381 2.30 0.224
설명: c_across()는 rowwise()와 함께 행 단위 계산을 쉽게 합니다.
8.3 pick: 선택한 열만 묶어서 사용
iris %>%
mutate(measurements = pick(Sepal.Length, Sepal.Width)) %>%
head()예시 출력(일부 열만 표시):
Sepal.Length Sepal.Width measurements
1 5.1 3.5 5.1, 3.5 (tibble 1×2)
2 4.9 3.0 4.9, 3.0 (tibble 1×2)
3 4.7 3.2 4.7, 3.2 (tibble 1×2)
설명: pick()은 mutate/summarise 안에서 특정 열들을 data.frame 형태로 선택하는 함수입니다.
9. 기본 데이터셋으로 미니 프로젝트
9.1 mtcars로 연비 분석
data(mtcars)
mtcars %>%
group_by(cyl) %>%
summarise(
avg_mpg = mean(mpg),
avg_hp = mean(hp)
)mtcars 데이터는 1974년 Motor Trend US 잡지에서 추출된 자동차 성능 데이터입니다.
9.2 airquality로 결측 처리
data(airquality)
# 결측치 확인
colSums(is.na(airquality))
# NA 제거
airquality_clean <- airquality %>% drop_na()
# 요약
summary(airquality_clean)airquality 데이터는 1973년 뉴욕의 대기질 측정치로 구성되어 있습니다.
9.3 ChickWeight로 성장 데이터 관찰
data(ChickWeight)
ChickWeight %>%
group_by(Diet) %>%
summarise(
avg_weight = mean(weight),
n = n()
)ChickWeight 데이터는 병아리의 식이별 성장 실험 데이터를 담고 있습니다.
10. 체크리스트
| 항목 | 확인 |
|---|---|
| R 설치 | R 버전 확인이 되는가? |
| RStudio 설치 | 콘솔이 정상 실행되는가? |
| 패키지 설치 | tidyverse, readxl, janitor 불러오기 되는가? |
| 기본 조작 | select/filter/mutate/summarise 이해됐는가? |
| 결측 처리 | drop_na/fill/replace_na 사용해봤는가? |
| across/pick | 여러 열을 다루는 방법 이해했는가? |
참고문헌 및 권위 출처
- Wickham & Grolemund (2023): R for Data Science (2nd ed.), O’Reilly Media 공식 웹북. 공식 출처 바로가기
- CRAN 공식 포털: The Comprehensive R Archive Network 공식 배포처. 공식 출처 바로가기
- Tidyverse dplyr 공식 가이드: 데이터 조작 문법 5대 동사 공식 도큐멘테이션. 공식 출처 바로가기