dplyr 기초 문법 이해하기

dplyr 필수함수 및 문법 익히기
Published

February 1, 2023

R에서 가장 인기가 많은 패키지 중 하나를 꼽으라고 한다면 바로 dplyr 일 것입니다.

dplyr 는 데이터 핸들링 패키지 중 하나로, 아래의 작업을 빠르고 쉽게 도와줄 수 있습니다.

dplyr 패키지에 대해 설명하기 위해 starwars 데이터를 사용하도록 하겠습니다. 자세한 사항은 ?starwars 를 통해 확인할 수 있습니다.

library(dplyr)

starwars
ABCDEFGHIJ0123456789
name
<chr>
height
<int>
mass
<dbl>
hair_color
<chr>
skin_color
<chr>
eye_color
<chr>
birth_year
<dbl>
sex
<chr>
gender
<chr>
Luke Skywalker17277.0blondfairblue19.0malemasculine
C-3PO16775.0NAgoldyellow112.0nonemasculine
R2-D29632.0NAwhite, bluered33.0nonemasculine
Darth Vader202136.0nonewhiteyellow41.9malemasculine
Leia Organa15049.0brownlightbrown19.0femalefeminine
Owen Lars178120.0brown, greylightblue52.0malemasculine
Beru Whitesun lars16575.0brownlightblue47.0femalefeminine
R5-D49732.0NAwhite, redredNAnonemasculine
Biggs Darklighter18384.0blacklightbrown24.0malemasculine
Obi-Wan Kenobi18277.0auburn, whitefairblue-gray57.0malemasculine

starwarstibble 데이터 구조를 갖습니다. 이는 dplyr 로 데이터를 불러올 때의 데이터 구조입니다. tibbledata.frame과 동일한 구조이지만 다른 점이 존재합니다.

1. dplyr의 동사들

dplyr는 영어 단어 동사를 함수로 사용하여 데이터를 다루게 됩니다. 이 함수들은 크게 세 가지로 나누어 볼 수 있습니다.

  • 행 (Rows)

    • filter() : 열을 기준으로 조건에 맞는 행들을 선택합니다.
    • slice() : 위치를 기준으로 행들을 선택합니다.
    • arrange() : 행의 순서를 변경합니다.
  • 열 (Columns)

    • select() : 특정 열을 선택합니다.
    • rename() : 열의 이름을 변경합니다.
    • mutate() : 새로운 열을 추가합니다.
    • relocate() : 열의 순서를 변경합니다.
  • 행 요약

    • summarise() : 여러 행을 계산합니다.

2. Pipe 구조

모든 dplyr의 함수는 분석하고자 하는 데이터(tibble)을 첫 번째 인자로 받습니다. dplyr에서는 f(x,y) 구조 보다는 x %>% f(y) 형태로 입력합니다. 이 때 %>% 또는|>파이프(pipe) 연산자라고 합니다. 파이프 연산자를 여러 번 사용하여 여러 함수를 이어서 실행할 수 있습니다.


3. filter() 행 선택하기

filter()는 데이터에서 일부 행들을 선택하는 함수입니다. filter() 안에는 찾고자 하는 조건이 TRUE인 행들만 선택이 되게 됩니다.

예를 들어, starwars 데이터에서 skin_color가 light이고 eye_color가 brown인 경우를 찾을 때는

starwars |> filter(skin_color=='light',
                   eye_color=='brown')
ABCDEFGHIJ0123456789
name
<chr>
height
<int>
mass
<dbl>
hair_color
<chr>
skin_color
<chr>
eye_color
<chr>
birth_year
<dbl>
sex
<chr>
gender
<chr>
homeworld
<chr>
Leia Organa15049brownlightbrown19femalefeminineAlderaan
Biggs Darklighter18384blacklightbrown24malemasculineTatooine
Cordé157NAbrownlightbrownNAfemalefeminineNaboo
Dormé165NAbrownlightbrownNAfemalefeminineNaboo
Raymus Antilles18879brownlightbrownNAmalemasculineAlderaan
Poe DameronNANAbrownlightbrownNAmalemasculineNA
Padmé Amidala16545brownlightbrown46femalefeminineNaboo

이는 기본 R 코드에서 다음과 같이 구현할 수 있습니다.

starwars[starwars$skin_color=='light' & starwars$eye_color=='brown',]
ABCDEFGHIJ0123456789
name
<chr>
height
<int>
mass
<dbl>
hair_color
<chr>
skin_color
<chr>
eye_color
<chr>
birth_year
<dbl>
sex
<chr>
gender
<chr>
homeworld
<chr>
Leia Organa15049brownlightbrown19femalefeminineAlderaan
Biggs Darklighter18384blacklightbrown24malemasculineTatooine
Cordé157NAbrownlightbrownNAfemalefeminineNaboo
Dormé165NAbrownlightbrownNAfemalefeminineNaboo
Raymus Antilles18879brownlightbrownNAmalemasculineAlderaan
Poe DameronNANAbrownlightbrownNAmalemasculineNA
Padmé Amidala16545brownlightbrown46femalefeminineNaboo

dplyr 를 이용하면, 불필요하게 데이터$변수 를 반복해서 사용할 필요가 없겠죠.

4. arrange(): 행 순서 정렬하기

arrange()filter()와 동일하게 행을 다루는 함수입니다. 다만 arrange()는 다루는 데이터의 행을 정렬합니다.

만약 두 가지 이상의 열 이름을 제공하는 경우, 첫 번째 열에서 같은 값이 나왔을 때, 추가적으로 행을 정렬하는 기준이 정해지게 됩니다.

starwars |> arrange(height)
ABCDEFGHIJ0123456789
name
<chr>
height
<int>
mass
<dbl>
hair_color
<chr>
skin_color
<chr>
eye_color
<chr>
birth_year
<dbl>
sex
<chr>
gender
<chr>
Yoda6617.0whitegreenbrown896.0malemasculine
Ratts Tyerell7915.0nonegrey, blueunknownNAmalemasculine
Wicket Systri Warrick8820.0brownbrownbrown8.0malemasculine
Dud Bolt9445.0noneblue, greyyellowNAmalemasculine
R2-D29632.0NAwhite, bluered33.0nonemasculine
R4-P1796NAnonesilver, redred, blueNAnonefeminine
R5-D49732.0NAwhite, redredNAnonemasculine
Sebulba11240.0nonegrey, redorangeNAmalemasculine
Gasgano122NAnonewhite, blueblackNAmalemasculine
Watto137NAblackblue, greyyellowNAmalemasculine

위의 정렬된 결과를 보면 R2-D2와 R4-P17의 키가 동일한 것을 알 수 있습니다. 이처럼 동일한 값이 오는 경우, arrange()에 하나의 값을 더 추가함으로써 추가적인 정렬 기준을 세우는 것입니다.

starwars |> arrange(height, mass)
ABCDEFGHIJ0123456789
name
<chr>
height
<int>
mass
<dbl>
hair_color
<chr>
skin_color
<chr>
eye_color
<chr>
birth_year
<dbl>
sex
<chr>
gender
<chr>
Yoda6617.0whitegreenbrown896.0malemasculine
Ratts Tyerell7915.0nonegrey, blueunknownNAmalemasculine
Wicket Systri Warrick8820.0brownbrownbrown8.0malemasculine
Dud Bolt9445.0noneblue, greyyellowNAmalemasculine
R2-D29632.0NAwhite, bluered33.0nonemasculine
R4-P1796NAnonesilver, redred, blueNAnonefeminine
R5-D49732.0NAwhite, redredNAnonemasculine
Sebulba11240.0nonegrey, redorangeNAmalemasculine
Gasgano122NAnonewhite, blueblackNAmalemasculine
Watto137NAblackblue, greyyellowNAmalemasculine

height를 기준으로 오름차순이 되었고, height가 같은 경우, mass가 작은 값부터 오게끔 정렬되었습니다.

만약 내림차순으로 데이터를 정렬하고 싶은 경우는 desc() 를 함께 사용하면 됩니다.

starwars |> arrange(desc(height))
ABCDEFGHIJ0123456789
name
<chr>
height
<int>
mass
<dbl>
hair_color
<chr>
skin_color
<chr>
eye_color
<chr>
birth_year
<dbl>
sex
<chr>
gender
<chr>
Yarael Poof264NAnonewhiteyellowNAmalemasculine
Tarfful234136.0brownbrownblueNAmalemasculine
Lama Su22988.0nonegreyblackNAmalemasculine
Chewbacca228112.0brownunknownblue200.0malemasculine
Roos Tarpals22482.0nonegreyorangeNAmalemasculine
Grievous216159.0nonebrown, whitegreen, yellowNAmalemasculine
Taun We213NAnonegreyblackNAfemalefeminine
Rugor Nass206NAnonegreenorangeNAmalemasculine
Tion Medon20680.0nonegreyblackNAmalemasculine
Darth Vader202136.0nonewhiteyellow41.9malemasculine

5. slice(): 행의 위치를 통한 행 선택

slice()는 행의 번호(index)를 통해 행들을 선택합니다.

starwars |> slice(5:10)
ABCDEFGHIJ0123456789
name
<chr>
height
<int>
mass
<dbl>
hair_color
<chr>
skin_color
<chr>
eye_color
<chr>
birth_year
<dbl>
sex
<chr>
gender
<chr>
homeworld
<chr>
Leia Organa15049brownlightbrown19femalefeminineAlderaan
Owen Lars178120brown, greylightblue52malemasculineTatooine
Beru Whitesun lars16575brownlightblue47femalefeminineTatooine
R5-D49732NAwhite, redredNAnonemasculineTatooine
Biggs Darklighter18384blacklightbrown24malemasculineTatooine
Obi-Wan Kenobi18277auburn, whitefairblue-gray57malemasculineStewjon

slice() 계열의 함수들은 다음과 같습니다.

  • slice_head(), slice_tail(): 각각 데이터의 첫 ~행, 마지막 ~행을 선택할 수 있습니다.

    starwars |> slice_head(n=5)
    ABCDEFGHIJ0123456789
    name
    <chr>
    height
    <int>
    mass
    <dbl>
    hair_color
    <chr>
    skin_color
    <chr>
    eye_color
    <chr>
    birth_year
    <dbl>
    sex
    <chr>
    gender
    <chr>
    homeworld
    <chr>
    Luke Skywalker17277blondfairblue19.0malemasculineTatooine
    C-3PO16775NAgoldyellow112.0nonemasculineTatooine
    R2-D29632NAwhite, bluered33.0nonemasculineNaboo
    Darth Vader202136nonewhiteyellow41.9malemasculineTatooine
    Leia Organa15049brownlightbrown19.0femalefeminineAlderaan
    starwars |> slice_tail(n=3)
    ABCDEFGHIJ0123456789
    name
    <chr>
    height
    <int>
    mass
    <dbl>
    hair_color
    <chr>
    skin_color
    <chr>
    eye_color
    <chr>
    birth_year
    <dbl>
    sex
    <chr>
    gender
    <chr>
    homeworld
    <chr>
    BB8NANAnonenoneblackNAnonemasculineNA
    Captain PhasmaNANAunknownunknownunknownNANANANA
    Padmé Amidala16545brownlightbrown46femalefeminineNaboo
  • slice_sample(): 무작위로 행을 선택합니다. n을 통해 행의 개수를 선택하거나, prop 옵션을 통해 특정 비율만큼 행을 선택할 수 있습니다.

    starwars |> slice_sample(n=10)
    ABCDEFGHIJ0123456789
    name
    <chr>
    height
    <int>
    mass
    <dbl>
    hair_color
    <chr>
    skin_color
    <chr>
    eye_color
    <chr>
    birth_year
    <dbl>
    sex
    <chr>
    gender
    <chr>
    homeworld
    <chr>
    Eeth Koth171NAblackbrownbrownNAmalemasculineIridonia
    Jek Tono Porkins180110brownfairblueNAmalemasculineBestine IV
    Greedo17374NAgreenblack44.0malemasculineRodia
    Darth Vader202136nonewhiteyellow41.9malemasculineTatooine
    IG-88200140nonemetalred15.0nonemasculineNA
    Quarsh Panaka183NAblackdarkbrown62.0NANANaboo
    Rugor Nass206NAnonegreenorangeNAmalemasculineNaboo
    Kit Fisto19687nonegreenblackNAmalemasculineGlee Anselm
    R2-D29632NAwhite, bluered33.0nonemasculineNaboo
    Mon Mothma150NAauburnfairblue48.0femalefeminineChandrila
    starwars |> slice_sample(prop = 0.1)
    ABCDEFGHIJ0123456789
    name
    <chr>
    height
    <int>
    mass
    <dbl>
    hair_color
    <chr>
    skin_color
    <chr>
    eye_color
    <chr>
    birth_year
    <dbl>
    sex
    <chr>
    gender
    <chr>
    homeworld
    <chr>
    Grievous216159nonebrown, whitegreen, yellowNAmalemasculineKalee
    Han Solo18080brownfairbrown29malemasculineCorellia
    San Hill191NAnonegreygoldNAmalemasculineMuunilinst
    R2-D29632NAwhite, bluered33nonemasculineNaboo
    Wicket Systri Warrick8820brownbrownbrown8malemasculineEndor
    FinnNANAblackdarkdarkNAmalemasculineNA
    Yoda6617whitegreenbrown896malemasculineNA
    Shmi Skywalker163NAblackfairbrown72femalefeminineTatooine

    replace=T를 통해 복원추출을 수행할 수 있습니다.

  • slice_min(), slice_max()를 통해 특정 열의 가장 높거나 가장 낮은 값을 갖는 행을 선택할 수 있습니다.

    starwars |> slice_max(height,n=3)
    ABCDEFGHIJ0123456789
    name
    <chr>
    height
    <int>
    mass
    <dbl>
    hair_color
    <chr>
    skin_color
    <chr>
    eye_color
    <chr>
    birth_year
    <dbl>
    sex
    <chr>
    gender
    <chr>
    homeworld
    <chr>
    Yarael Poof264NAnonewhiteyellowNAmalemasculineQuermia
    Tarfful234136brownbrownblueNAmalemasculineKashyyyk
    Lama Su22988nonegreyblackNAmalemasculineKamino

6. select(): 열 선택하기

큰 데이터를 다루게 될 경우, 많은 열이 존재하기 마련입니다. 이 중 분석하고자 하는 일부의 열만 선택할 수 있도록 도와주는 함수가 바로 select()입니다.

starwars |> select(hair_color, skin_color, eye_color)
ABCDEFGHIJ0123456789
hair_color
<chr>
skin_color
<chr>
eye_color
<chr>
blondfairblue
NAgoldyellow
NAwhite, bluered
nonewhiteyellow
brownlightbrown
brown, greylightblue
brownlightblue
NAwhite, redred
blacklightbrown
auburn, whitefairblue-gray

만약 열들이 붙어 있다면 :을 이용해 한번에 출력할 수도 있습니다.

starwars |> select(hair_color:eye_color)
ABCDEFGHIJ0123456789
hair_color
<chr>
skin_color
<chr>
eye_color
<chr>
blondfairblue
NAgoldyellow
NAwhite, bluered
nonewhiteyellow
brownlightbrown
brown, greylightblue
brownlightblue
NAwhite, redred
blacklightbrown
auburn, whitefairblue-gray

또한 select() 안에서 열 이름이 갖는 규칙을 활용하여, 특정 규칙만을 갖는 열만 선택할 수 있습니다.

  • starts_with() : 특정한 값으로 시작하는 열 이름 찾기

    starwars |> select(starts_with('hair'))
    ABCDEFGHIJ0123456789
    hair_color
    <chr>
    blond
    NA
    NA
    none
    brown
    brown, grey
    brown
    NA
    black
    auburn, white
  • ends_with() : 특정한 값으로 끝나는 열 이름 찾기

    starwars |> select(ends_with('hair'))
    ABCDEFGHIJ0123456789
  • matches() : 정규 표현식을 통한 열 이름 찾기

    starwars |> select(matches('^[a-z]{4}_'))
    ABCDEFGHIJ0123456789
    hair_color
    <chr>
    skin_color
    <chr>
    blondfair
    NAgold
    NAwhite, blue
    nonewhite
    brownlight
    brown, greylight
    brownlight
    NAwhite, red
    blacklight
    auburn, whitefair
  • contains() :특정한 문자가 포함된 열 이름 찾기

    starwars |> select(contains('_'))
    ABCDEFGHIJ0123456789
    hair_color
    <chr>
    skin_color
    <chr>
    eye_color
    <chr>
    birth_year
    <dbl>
    blondfairblue19.0
    NAgoldyellow112.0
    NAwhite, bluered33.0
    nonewhiteyellow41.9
    brownlightbrown19.0
    brown, greylightblue52.0
    brownlightblue47.0
    NAwhite, redredNA
    blacklightbrown24.0
    auburn, whitefairblue-gray57.0
  • num_range() : 특정 숫자범위를 갖는 열 이름 찾기

    num_range() 함수를 설명하기 위해 tidyr 패키지에 있는 billboard 데이터를 사용하겠습니다.

    library(tidyr)
    billboard |> select(num_range('wk',1:10))
    ABCDEFGHIJ0123456789
    wk1
    <dbl>
    wk2
    <dbl>
    wk3
    <dbl>
    wk4
    <dbl>
    wk5
    <dbl>
    wk6
    <dbl>
    wk7
    <dbl>
    wk8
    <dbl>
    wk9
    <dbl>
    wk10
    <dbl>
    87827277879499NANANA
    918792NANANANANANANA
    81706867665754535151
    76767269676555596261
    57342517173136495357
    5139342626192236
    97979695100NANANANANA
    84625141383535383836
    59533828211816141210
    76767469686761585759

7. rename(): 열 이름 변경

select()문을 이용해 원하는 이름으로 열을 출력할 수도 있습니다.

starwars |> select(home_world=homeworld)
ABCDEFGHIJ0123456789
home_world
<chr>
Tatooine
Tatooine
Naboo
Tatooine
Alderaan
Tatooine
Tatooine
Tatooine
Tatooine
Stewjon

그러나 select()는 선택된 열 이외에 다른 열들은 모두 버리기 때문에, rename()을 이용해 열 이름을 변경해줄 수 있습니다.

# rename(new = old)
starwars |> rename(home_world = homeworld)
ABCDEFGHIJ0123456789
name
<chr>
height
<int>
mass
<dbl>
hair_color
<chr>
skin_color
<chr>
eye_color
<chr>
birth_year
<dbl>
sex
<chr>
gender
<chr>
Luke Skywalker17277.0blondfairblue19.0malemasculine
C-3PO16775.0NAgoldyellow112.0nonemasculine
R2-D29632.0NAwhite, bluered33.0nonemasculine
Darth Vader202136.0nonewhiteyellow41.9malemasculine
Leia Organa15049.0brownlightbrown19.0femalefeminine
Owen Lars178120.0brown, greylightblue52.0malemasculine
Beru Whitesun lars16575.0brownlightblue47.0femalefeminine
R5-D49732.0NAwhite, redredNAnonemasculine
Biggs Darklighter18384.0blacklightbrown24.0malemasculine
Obi-Wan Kenobi18277.0auburn, whitefairblue-gray57.0malemasculine

8. mutate(): 새로운 열 추가하기

starwars |> mutate(height_m = height / 100)
ABCDEFGHIJ0123456789
name
<chr>
height
<int>
mass
<dbl>
hair_color
<chr>
skin_color
<chr>
eye_color
<chr>
birth_year
<dbl>
sex
<chr>
gender
<chr>
Luke Skywalker17277.0blondfairblue19.0malemasculine
C-3PO16775.0NAgoldyellow112.0nonemasculine
R2-D29632.0NAwhite, bluered33.0nonemasculine
Darth Vader202136.0nonewhiteyellow41.9malemasculine
Leia Organa15049.0brownlightbrown19.0femalefeminine
Owen Lars178120.0brown, greylightblue52.0malemasculine
Beru Whitesun lars16575.0brownlightblue47.0femalefeminine
R5-D49732.0NAwhite, redredNAnonemasculine
Biggs Darklighter18384.0blacklightbrown24.0malemasculine
Obi-Wan Kenobi18277.0auburn, whitefairblue-gray57.0malemasculine

tibble 특성 상 새롭게 만든 열이 바로 보이지 않지만, select()를 이용해 출력할 수 있습니다.

starwars |>
  mutate(height_m = height / 100) %>%
  select(height_m, height, everything())
ABCDEFGHIJ0123456789
height_m
<dbl>
height
<int>
name
<chr>
mass
<dbl>
hair_color
<chr>
skin_color
<chr>
eye_color
<chr>
birth_year
<dbl>
sex
<chr>
gender
<chr>
1.72172Luke Skywalker77.0blondfairblue19.0malemasculine
1.67167C-3PO75.0NAgoldyellow112.0nonemasculine
0.9696R2-D232.0NAwhite, bluered33.0nonemasculine
2.02202Darth Vader136.0nonewhiteyellow41.9malemasculine
1.50150Leia Organa49.0brownlightbrown19.0femalefeminine
1.78178Owen Lars120.0brown, greylightblue52.0malemasculine
1.65165Beru Whitesun lars75.0brownlightblue47.0femalefeminine
0.9797R5-D432.0NAwhite, redredNAnonemasculine
1.83183Biggs Darklighter84.0blacklightbrown24.0malemasculine
1.82182Obi-Wan Kenobi77.0auburn, whitefairblue-gray57.0malemasculine

mutate() 안에서 새롭게 만든 열도 접근이 가능합니다.

starwars |> 
  mutate(
    height_m = height / 100,
    BMI = mass / (height_m^2)
  ) %>%
  select(BMI, everything())
ABCDEFGHIJ0123456789
BMI
<dbl>
name
<chr>
height
<int>
mass
<dbl>
hair_color
<chr>
skin_color
<chr>
eye_color
<chr>
birth_year
<dbl>
sex
<chr>
gender
<chr>
26.02758Luke Skywalker17277.0blondfairblue19.0malemasculine
26.89232C-3PO16775.0NAgoldyellow112.0nonemasculine
34.72222R2-D29632.0NAwhite, bluered33.0nonemasculine
33.33007Darth Vader202136.0nonewhiteyellow41.9malemasculine
21.77778Leia Organa15049.0brownlightbrown19.0femalefeminine
37.87401Owen Lars178120.0brown, greylightblue52.0malemasculine
27.54821Beru Whitesun lars16575.0brownlightblue47.0femalefeminine
34.00999R5-D49732.0NAwhite, redredNAnonemasculine
25.08286Biggs Darklighter18384.0blacklightbrown24.0malemasculine
23.24598Obi-Wan Kenobi18277.0auburn, whitefairblue-gray57.0malemasculine

만약 기존의 열은 없애고 새로운 열만 남기고 싶다면, transmute() 를 이용할 수 있습니다.

starwars |>
  transmute(
    height_m = height / 100,
    BMI = mass / (height_m^2)
  )
ABCDEFGHIJ0123456789
height_m
<dbl>
BMI
<dbl>
1.7226.02758
1.6726.89232
0.9634.72222
2.0233.33007
1.5021.77778
1.7837.87401
1.6527.54821
0.9734.00999
1.8325.08286
1.8223.24598

9. relocate(): 순서 변경

relocate()는 옮길 열들과, 옮길 위치를 지정해주면 됩니다.

# .before or .after
starwars |> relocate(sex:homeworld, # 옮길 열들
                    .before = height # 옮길 위치
                    )
ABCDEFGHIJ0123456789
name
<chr>
sex
<chr>
gender
<chr>
homeworld
<chr>
height
<int>
mass
<dbl>
hair_color
<chr>
skin_color
<chr>
eye_color
<chr>
Luke SkywalkermalemasculineTatooine17277.0blondfairblue
C-3POnonemasculineTatooine16775.0NAgoldyellow
R2-D2nonemasculineNaboo9632.0NAwhite, bluered
Darth VadermalemasculineTatooine202136.0nonewhiteyellow
Leia OrganafemalefeminineAlderaan15049.0brownlightbrown
Owen LarsmalemasculineTatooine178120.0brown, greylightblue
Beru Whitesun larsfemalefeminineTatooine16575.0brownlightblue
R5-D4nonemasculineTatooine9732.0NAwhite, redred
Biggs DarklightermalemasculineTatooine18384.0blacklightbrown
Obi-Wan KenobimalemasculineStewjon18277.0auburn, whitefairblue-gray

10. summarise(), summarize(): 요약

summarise() 는 하나의 열에 대해 평균, 표준편차, 중앙값 등으로 요약하기 위해 함께 사용되는 함수입니다.

starwars |> summarise(height = mean(height, na.rm = TRUE))
ABCDEFGHIJ0123456789
height
<dbl>
174.358

dplyr%>%(또는 |>)를 사용하여 출력했을 때, 출력된 값이 저장되지 않습니다. 즉 분석하는 데이터에는 변경사항이 없습니다. 만약 새로운 열을 추가하거나 이름을 변경할 때, 또는 계산한 값을 저장하기 위해서는 <- 를 이용해 데이터에 저장하거나 새로운 값으로 선언해야 합니다.

starwars2 <- starwars %>%
  group_by(species, sex) %>%
  select(height, mass) %>%
  summarise(
    height = mean(height, na.rm = TRUE),
    mass = mean(mass, na.rm = TRUE)
  )

# starwars2에는 group_by 후 summarise한 값만 존재
starwars2
ABCDEFGHIJ0123456789
species
<chr>
sex
<chr>
height
<dbl>
mass
<dbl>
Aleenamale79.000015.00000
Besaliskmale198.0000102.00000
Cereanmale198.000082.00000
Chagrianmale196.0000NaN
Clawditefemale168.000055.00000
Droidnone131.200069.75000
Dugmale112.000040.00000
Ewokmale88.000020.00000
Geonosianmale183.000080.00000
Gunganmale208.666774.00000

Reference

  • https://dplyr.tidyverse.org/articles/dplyr.html
Back to top