dplyr์ ๋ํ์ ์ธ ํจ์ select, filter, mutate, summarise, group_by, sample_n, sample_frac์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ดํดํ๊ณ ์ ์ฉํ์ฌ ๋ณด์.
In:
library(dplyr)
df_iris = iris
str(df_iris)
Out:
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Species
setosa :50
versicolor:50
virginica :50
โท R์ ๋ด์ฅ๋ Iris ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ ๊ฒ์ด๋ค.
โก select
In:
df_iris %>%
select(Sepal.Length) %>%
head()
df_iris %>%
select(Sepal.Length, Sepal.Width) %>%
head()
df_iris %>%
select(1:3) %>%
head()
df_iris %>%
select(starts_with('Sepal')) %>%
head()
df_iris %>%
select(ends_with('Length')) %>%
head()
df_iris %>%
select(contains('.')) %>%
head()
Out:
Sepal.Length
1 5.1
2 4.9
3 4.7
4 4.6
5 5.0
6 5.4
Sepal.Length Sepal.Width
1 5.1 3.5
2 4.9 3.0
3 4.7 3.2
4 4.6 3.1
5 5.0 3.6
6 5.4 3.9
Sepal.Length Sepal.Width Petal.Length
1 5.1 3.5 1.4
2 4.9 3.0 1.4
3 4.7 3.2 1.3
4 4.6 3.1 1.5
5 5.0 3.6 1.4
6 5.4 3.9 1.7
Sepal.Length Sepal.Width
1 5.1 3.5
2 4.9 3.0
3 4.7 3.2
4 4.6 3.1
5 5.0 3.6
6 5.4 3.9
Sepal.Length Petal.Length
1 5.1 1.4
2 4.9 1.4
3 4.7 1.3
4 4.6 1.5
5 5.0 1.4
6 5.4 1.7
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.1 3.5 1.4 0.2
2 4.9 3.0 1.4 0.2
3 4.7 3.2 1.3 0.2
4 4.6 3.1 1.5 0.2
5 5.0 3.6 1.4 0.2
6 5.4 3.9 1.7 0.4
โท ์ฒซ ๋ฒ์งธ ๊ฒฐ๊ณผ๋ select ํจ์์ ์ธ์๋ก ์ด์ ์ด๋ฆ์ ์ ๋ ฅํ๋ฉด ํด๋น ์ด๋ง ์ถ๋ ฅ๋ ๊ฒ์ด๋ค. ๋ ๋ฒ์งธ ๊ฒฐ๊ณผ๋ ๋ ๊ฐ์ ์ด์ ์ธ์๋ก ์ฃผ์ด, 2๊ฐ์ ์ด์ ์ถ๋ ฅํ ๊ฒ์ด๋ค. ์ธ ๋ฒ์งธ ๊ฒฐ๊ณผ๋ ์ด์ ์ด๋ฆ์ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ, ์์๋ฅผ ํตํด ํด๋น ์์์ ์ด์ ์ถ๋ ฅํ ๊ฒ์ด๋ค. ๋ค ๋ฒ์งธ๋ starts_with ํจ์์ ์ธ์๋ก ์ฃผ์ด์ง ๋ฌธ์์ด์ด ์ด์ ์ฒซ ๋ถ๋ถ์ ํฌํจ๋ ์ด์ ์ถ๋ ฅํ ๊ฒฐ๊ณผ์ด๋ค. ๋ค์ฏ ๋ฒ์งธ ๊ฒฐ๊ณผ๋ ends_with ํจ์์ ์ธ์๋ก ์ฃผ์ด์ง ๋ฌธ์์ด์ด ์ด์ ๋ง์ง๋ง ๋ถ๋ถ์ ํฌํจ๋ ์ด์ ์ถ๋ ฅํ ๊ฒฐ๊ณผ์ด๋ค. ๋ง์ง๋ง ๊ฒฐ๊ณผ๋ contains ํจ์์ ์ธ์๋ก ์ฃผ์ด์ง ๋ฌธ์์ด์ด ํฌํจ๋ ์ด์ ์ถ๋ ฅํ ๊ฒฐ๊ณผ์ด๋ค.
โก filter
In:
df_iris %>%
filter(Species == 'virginica') %>%
head()
df_iris %>%
filter(Species == 'virginica' & Sepal.Width <= 3) %>%
head()
Out:
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 6.3 3.3 6.0 2.5 virginica
2 5.8 2.7 5.1 1.9 virginica
3 7.1 3.0 5.9 2.1 virginica
4 6.3 2.9 5.6 1.8 virginica
5 6.5 3.0 5.8 2.2 virginica
6 7.6 3.0 6.6 2.1 virginica
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.8 2.7 5.1 1.9 virginica
2 7.1 3.0 5.9 2.1 virginica
3 6.3 2.9 5.6 1.8 virginica
4 6.5 3.0 5.8 2.2 virginica
5 7.6 3.0 6.6 2.1 virginica
6 4.9 2.5 4.5 1.7 virginica
โท ์ฒซ ๋ฒ์งธ ๊ฒฐ๊ณผ๋ filter ํจ์์ ํ์ ์กฐ๊ฑด์ ์ธ์๋ก ์ฃผ์ด ์ถ๋ ฅํ ๊ฒ์ด๋ค. ๋ ๋ฒ์งธ ๊ฒฐ๊ณผ๋ ๋ณต์์ ์กฐ๊ฑด์ ์ธ์๋ก ์ฃผ์ด ์ถ๋ ฅํ ๊ฒ์ด๋ค.
โก mutate
In:
df_iris %>%
mutate(is_long_Sepal.Length = if_else(Sepal.Length >= 5, 'High', 'Low')) %>%
head()
Out:
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
is_long_Sepal.Length
1 High
2 Low
3 Low
4 Low
5 High
6 High
โท mutate ํจ์๋ฅผ ์ด์ฉํ์ฌ ๊ธฐ์กด์ ์ด์ ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ์๋ก์ด ์ด์ ์์ฑํ์๋ค. ์์ ๊ฒฐ๊ณผ๋ mutate, if_else ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ ์ด์ ๋ง๋ ๊ฒ์ด๋ค.
โก summarise
In:
df_iris %>%
summarise(count = n(),
n_species = n_distinct(Species),
max_Sepal.Length = max(Sepal.Length))
Out:
count n_species max_Sepal.Length
1 150 3 7.9
โท summarise ํจ์๋ฅผ ์ด์ฉํ์ฌ ์์ฝ๋ ์ ๋ณด๋ฅผ ๊ตฌํ ์ ์๋ค. ์์ ๊ฒฐ๊ณผ๋ summarise ํจ์๋ฅผ ์ด์ฉํ์ฌ, df_iris ๋ฐ์ดํฐํ๋ ์์ ํ์ ๊ฐ์, Sepecies ์ด์ ์ ์ผํ ๊ฐ์ ๊ฐ์, Sepal.Length ์ด์ ์ต๋๊ฐ์ ์์ฝํ์ฌ ๋ํ๋ธ ๊ฒ์ด๋ค.
โก group_by
In:
df_iris %>%
group_by(Species) %>%
summarise(count = n(),
max_Sepal.Length = max(Sepal.Length))
Out:
# A tibble: 3 x 3
Species count max_Sepal.Length
<fct> <int> <dbl>
1 setosa 50 5.8
2 versicolor 50 7
3 virginica 50 7.9
โท group_by ํจ์์ summarise ํจ์๊ฐ ํฉ์น๋ฉด ์์ฃผ ์ ์ฉํ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค. ์์ ๊ฒฐ๊ณผ๋ group_by ํจ์๋ฅผ ์ด์ฉํ์ฌ, Species์ ๋ฐ๋ฅธ ํ์ ๊ฐ์์ Sepal.Length ์ด์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์์ฝํ์ฌ ๋ํ๋ธ ๊ฒ์ด๋ค.
โก arrange
In:
df_iris %>%
arrange(Sepal.Length) %>%
head()
Out:
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 4.3 3.0 1.1 0.1 setosa
2 4.4 2.9 1.4 0.2 setosa
3 4.4 3.0 1.3 0.2 setosa
4 4.4 3.2 1.3 0.2 setosa
5 4.5 2.3 1.3 0.3 setosa
6 4.6 3.1 1.5 0.2 setosa
โท arrange ํจ์๋ฅผ ์ด์ฉํ์ฌ, ํน์ ์ด์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ์ ์ํํ ์ ์๋ค. ์์ ๊ฒฐ๊ณผ๋ arrange ํจ์๋ฅผ ์ด์ฉํ์ฌ Sepal.Length๊ฐ ์์ ์์๋๋ก ์ ๋ ฌํ์ฌ ๋ํ๋ธ ๊ฒ์ด๋ค.
โก sample_n & sample_frac
In:
df_iris %>%
sample_n(10)
df_iris %>%
sample_n(10, replace = TRUE)
df_iris %>%
sample_frac(0.05)
df_iris %>%
sample_frac(0.05, replace = TRUE)
Out:
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 6.3 2.9 5.6 1.8 virginica
2 6.3 3.3 4.7 1.6 versicolor
3 5.4 3.7 1.5 0.2 setosa
4 5.7 3.8 1.7 0.3 setosa
5 5.1 3.5 1.4 0.2 setosa
6 6.7 3.0 5.0 1.7 versicolor
7 4.6 3.4 1.4 0.3 setosa
8 6.7 3.1 5.6 2.4 virginica
9 5.5 2.6 4.4 1.2 versicolor
10 5.8 2.8 5.1 2.4 virginica
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 4.9 3.0 1.4 0.2 setosa
2 6.4 2.7 5.3 1.9 virginica
3 6.0 2.9 4.5 1.5 versicolor
4 6.7 3.1 4.4 1.4 versicolor
5 4.8 3.0 1.4 0.1 setosa
6 4.8 3.4 1.6 0.2 setosa
7 6.1 2.8 4.0 1.3 versicolor
8 4.9 3.0 1.4 0.2 setosa
9 5.4 3.0 4.5 1.5 versicolor
10 5.7 2.6 3.5 1.0 versicolor
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 6.0 2.9 4.5 1.5 versicolor
2 7.0 3.2 4.7 1.4 versicolor
3 4.9 3.1 1.5 0.1 setosa
4 6.2 2.2 4.5 1.5 versicolor
5 4.5 2.3 1.3 0.3 setosa
6 6.4 3.2 4.5 1.5 versicolor
7 4.4 3.2 1.3 0.2 setosa
8 6.1 2.9 4.7 1.4 versicolor
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 6.9 3.1 4.9 1.5 versicolor
2 6.9 3.1 5.4 2.1 virginica
3 5.5 2.6 4.4 1.2 versicolor
4 5.6 2.9 3.6 1.3 versicolor
5 7.9 3.8 6.4 2.0 virginica
6 5.6 2.9 3.6 1.3 versicolor
7 5.1 3.8 1.6 0.2 setosa
8 4.9 3.6 1.4 0.1 setosa
โท sample_n ํจ์๋ ์ธ์๋งํผ์ ๊ฐ์๋ฅผ ๋๋คํ๊ฒ ์ถ์ถํ๋ค. replace ์ธ์๋ฅผ TRUE๋ก ์ฃผ๋ฉด, ๋ณต์์ถ์ถ์ด ๊ฐ๋ฅํด์ง๋ค. sample_frac ํจ์๋ ์ธ์๋งํผ์ ๋น์จ์ ๋๋คํ๊ฒ ์ถ์ถํ๋ค. replace ์ธ์๋ฅผ TRUE๋ก sample_n ํจ์์ ๊ฐ์ด ๋ณต์์ถ์ถ์ด ๊ฐ๋ฅํด์ง๋ค.
'Programming > R' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ธฐ๋ณธ ํจ์ ์ฌ์ฉ๋ฒ (0) | 2020.10.24 |
---|---|
caret ์ฌ์ฉ๋ฒ (0) | 2020.10.22 |
๊ฒฐ์ธก์น ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ (0) | 2020.10.21 |
CSV ํ์ผ ์ฝ๊ธฐ/์ฐ๊ธฐ (0) | 2020.10.21 |
๋ฌธ์์ด ๋ฐ์ดํฐ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ (0) | 2020.10.20 |