0. 이 글의 목표
이 글은 R을 처음 설치하는 단계부터, 기본 데이터셋을 이용한 데이터 조작, NA 처리, across/c_across/pick 같은 실무 함수까지 하나하나 따라할 수 있도록 구성했습니다. 긴 글이지만 순서대로만 따라 하면 실습이 끝나는 구조입니다.

1. R이란 무엇인가 (1분 요약)
- R은 통계 분석과 데이터 처리를 위한 프로그래밍 언어입니다.
- RStudio는 R을 편하게 쓰게 도와주는 IDE(개발 환경)입니다.
목표는 단순합니다. R(엔진) + RStudio(작업실) + 필수 패키지(도구) 를 설치하고, 기본 데이터셋으로 연습하는 것.
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 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.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)
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 | 여러 열을 다루는 방법 이해했는가? |