R과 RStudio 설치부터 dplyr 데이터 다루기 기초 첫걸음

R 설치·RStudio 세팅·패키지 설치부터 기본 데이터셋으로 데이터 조작을 배우는 완전 초보자용 실습 가이드입니다.
데이터·통계
저자

Ikmyungterran

공개

2026년 2월 22일

Modified

2026년 10월 18일

힌트이 글에서 해결할 수 있는 핵심 과제

이 글을 읽으면 컴퓨터에 R과 RStudio를 충돌 없이 설치하고, dplyr의 필수 데이터 조작 함수(filter, select, mutate, summarise, group_by)와 결측치(NA) 정제 코드를 10분 만에 직접 실행해 볼 수 있습니다.

0. 이 글의 목표

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

R 로고


1. R이란 무엇인가 (1분 요약)

  • R은 통계 분석과 데이터 처리를 위한 프로그래밍 언어입니다.
  • RStudio는 R을 편하게 쓰게 도와주는 IDE(개발 환경)입니다.

목표는 단순합니다. R(엔진) + RStudio(작업실) + 필수 패키지(도구) 를 설치하고, 기본 데이터셋으로 연습하는 것.

1.1 R 데이터 분석 에코시스템 구조

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


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 기준)

  1. R Base 다운로드: https://cran.r-project.org/bin/windows/base/ 접속 → 최신 설치 파일 다운로드
  2. R 설치 완료 확인: 설치 후 R 또는 RStudio에서 버전 확인
  3. Rtools 4.5 다운로드: https://cran.r-project.org/bin/windows/Rtools/ 접속 → Rtools 4.5 설치 파일 선택
  4. RStudio 다운로드: https://posit.co/downloads/ 접속 → RStudio Desktop 설치 파일 선택
  5. Rtools 4.5 설치 (예: C:\rtools45) — 이 경로를 환경변수에 그대로 사용
  6. 시스템 환경변수에 RTOOLS45_HOME 추가
    • Windows 검색창에 “환경 변수” 입력 → “시스템 환경 변수 편집” 클릭
    • [환경 변수(N)…] 버튼 클릭
    • 시스템 변수 영역에서 [새로 만들기(N)…] 클릭
    • 변수 이름: RTOOLS45_HOME
    • 변수 값: C:\rtools45 (실제 설치 경로)
    • 확인 → 확인
  7. PATH에 Rtools 경로 추가
    • 같은 창에서 시스템 변수 → Path 선택 → [편집]
    • [새로 만들기] → %RTOOLS45_HOME%\usr\bin\ 입력
    • 확인 → 확인
  8. 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 여러 열을 다루는 방법 이해했는가?



참고문헌 및 권위 출처


함께 읽으면 좋은 글