Description functions provided in tidyr Package
Package
tidyr
(Ver. 1.2.0)는 “tidy”라는 영어 낱말 뜻(깔끔한, 잘 정돈한)처럼 데이터를 분석하기 쉽게 정리하는 데 도움을 주는 R 패키지이다. R에 입력된 데이터 세트는 대부분 바로 통계분석이 가능한 상태가 아니기 때문에 깔끔한 데이터(Tidy Data)로 정리하는 과정이 필요하다. 여기서, 깔끔한 데이터란 아래의 그림과 같이 1. 각 변수는 열에 해당하며, 2. 하나의 행은 하나의 관측을 의미하고, 3. 하나의 셀에는 하나의 관측값만 있는 데이터를 의미한다. 깔끔한 데이터는 표준화된 데이터 구조로 변수 및 관측치 추출이 용이하고, 모델링이 편하며 시각화가 쉬운 장점이 있다. 이러한 깔끔한 데이터를 만드는데 필요한 여러 함수가 Packagetidyr
에 포함되어 있다.
Package
tidyr
의 대표적인 함수는 다음과 같다.
그 외에도 Package tidyr
에 포함된 함수는 tidyr
설명 pdf, tidyr 홈페이지,
그리고 Cheat
Sheet를 참고한다.
# 2. p_load 이용하여 설치와 로드를 한꺼번에 에
# install.packages("pacman") # For p_load
pacman::p_load("tidyr") # pacman::p_load : pacman 패키지의 p_load함수 사용NA
Result!
함수 p_load()
는 작성된 패키지가
설치 되어있지 않으면 설치 후 함수 library()
를 자동적으로
실행한다.
pivot_longer()
은 여러 열에 입력된 데이터를 하나의
열로 모으는 데 유용한 함수이다.
pivot_longer(data, cols, names_to = "name", values_to = "value")
data
: 데이터 프레임(Data Frame)cols
: 하나의 열로 합칠 열 이름names_to
: 선택된 열의 이름
이 입력될
새로운 열 이름values_to
: 흩어진 데이터
를 하나로 합쳐서
입력할 열 이름Package
tidyr
에 내장된 데이터 프레임 “table4a”의 변수 “1999”와 “2000”에 입력된 관측값을 하나의 열로 모으기 위해 함수pivot_longer()
적용
data(table4a)
table4a
# A tibble: 3 x 3
country `1999` `2000`
* <chr> <int> <int>
1 Afghanistan 745 2666
2 Brazil 37737 80488
3 China 212258 213766
# Ver. 1
table4a %>%
pivot_longer(cols = c("1999", "2000"),
names_to = "year", # 변수 이름 "1999"와 "2000"이 입력될 새로운 열 이름
values_to = "cases") # 변수 "1999"와 "2000"에 입력된 값들을 합쳐서 나타낼 새로운 열 이름열 이름
# A tibble: 6 x 3
country year cases
<chr> <chr> <int>
1 Afghanistan 1999 745
2 Afghanistan 2000 2666
3 Brazil 1999 37737
4 Brazil 2000 80488
5 China 1999 212258
6 China 2000 213766
# Ver. 2
table4a %>%
pivot_longer(cols = -country,
names_to = "year", # 변수 이름 "1999"와 "2000"이 입력될 새로운 열 이름
values_to = "cases") # 변수 "1999"와 "2000"에 입력된 값들을 합쳐서 나타낼 새로운 열 이름열 이름
# A tibble: 6 x 3
country year cases
<chr> <chr> <int>
1 Afghanistan 1999 745
2 Afghanistan 2000 2666
3 Brazil 1999 37737
4 Brazil 2000 80488
5 China 1999 212258
6 China 2000 213766
어떤 제품의 3년간 분기별 판매량이 df1이라고 할 때, 분기별 판매량을 하나의 열로 모으기 위해 함수
pivot_longer()
적용
df1 <- data.frame(Year = c(2019, 2020, 2021),
Q1 = c(102, 85, 97),
Q2 = c(158, 105, 136),
Q3 = c(135, 103, 123),
Q4 = c(147, 93, 114))
df1
Year Q1 Q2 Q3 Q4
1 2019 102 158 135 147
2 2020 85 105 103 93
3 2021 97 136 123 114
df1 %>%
pivot_longer(cols = -Year,
names_to = "Qtr", # 변수 이름 "Q1"~"Q4"가 입력될 새로운 열 이름이름
values_to = "Sales") # 변수 "Q1"~"Q4"에 입력된 값들을 합쳐서 나타낼 새로운 열 이름열 이름
# A tibble: 12 x 3
Year Qtr Sales
<dbl> <chr> <dbl>
1 2019 Q1 102
2 2019 Q2 158
3 2019 Q3 135
4 2019 Q4 147
5 2020 Q1 85
6 2020 Q2 105
7 2020 Q3 103
8 2020 Q4 93
9 2021 Q1 97
10 2021 Q2 136
11 2021 Q3 123
12 2021 Q4 114
Package
tidyr
에 내장된 데이터 프레임 “billboard”의 변수 “wk1”부터 “wk76”까지 입력된 관측값을 하나의 열로 모으기 위해 함수pivot_longer()
적용
Package tidyr
에 있는 데이터 프레임 “billboard”에는
2000년 Billboard Top 100에 오른 노래의 가수(“artist”)와 노래
제목(“track”), top 100 리스트에 들어간 날짜(“data.entered”), 그리고
리스트에 오른 이후의 매주 순위가 변수 “wk1”부터 “wk76”까지 입력되어
있다. 원하는 분석은 매주 연속해서 top 100에 올라있던 노래만을 대상으로
리스트에 머물러 있던 최장 기간과 그 기간 중 최고 순위를 알아내는 것이기
때문에 변수 “wk1”부터 “wk76”까지에 이벽된 값들은 하나의 열에 입력되어야
적절한 통계분석이 가능하다.
data(billboard)
billboard
# A tibble: 317 x 79
artist track date.entered wk1 wk2 wk3 wk4 wk5 wk6 wk7
<chr> <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2 Pac Baby~ 2000-02-26 87 82 72 77 87 94 99
2 2Ge+h~ The ~ 2000-09-02 91 87 92 NA NA NA NA
3 3 Doo~ Kryp~ 2000-04-08 81 70 68 67 66 57 54
4 3 Doo~ Loser 2000-10-21 76 76 72 69 67 65 55
5 504 B~ Wobb~ 2000-04-15 57 34 25 17 17 31 36
6 98^0 Give~ 2000-08-19 51 39 34 26 26 19 2
7 A*Tee~ Danc~ 2000-07-08 97 97 96 95 100 NA NA
8 Aaliy~ I Do~ 2000-01-29 84 62 51 41 38 35 35
9 Aaliy~ Try ~ 2000-03-18 59 53 38 28 21 18 16
10 Adams~ Open~ 2000-08-26 76 76 74 69 68 67 61
# ... with 307 more rows, and 69 more variables: wk8 <dbl>,
# wk9 <dbl>, wk10 <dbl>, wk11 <dbl>, wk12 <dbl>, wk13 <dbl>,
# wk14 <dbl>, wk15 <dbl>, wk16 <dbl>, wk17 <dbl>, wk18 <dbl>,
# wk19 <dbl>, wk20 <dbl>, wk21 <dbl>, wk22 <dbl>, wk23 <dbl>,
# wk24 <dbl>, wk25 <dbl>, wk26 <dbl>, wk27 <dbl>, wk28 <dbl>,
# wk29 <dbl>, wk30 <dbl>, wk31 <dbl>, wk32 <dbl>, wk33 <dbl>,
# wk34 <dbl>, wk35 <dbl>, wk36 <dbl>, wk37 <dbl>, wk38 <dbl>, ...
billboard %>%
head(5)
# A tibble: 5 x 79
artist track date.entered wk1 wk2 wk3 wk4 wk5 wk6 wk7
<chr> <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2 Pac Baby~ 2000-02-26 87 82 72 77 87 94 99
2 2Ge+her The ~ 2000-09-02 91 87 92 NA NA NA NA
3 3 Door~ Kryp~ 2000-04-08 81 70 68 67 66 57 54
4 3 Door~ Loser 2000-10-21 76 76 72 69 67 65 55
5 504 Bo~ Wobb~ 2000-04-15 57 34 25 17 17 31 36
# ... with 69 more variables: wk8 <dbl>, wk9 <dbl>, wk10 <dbl>,
# wk11 <dbl>, wk12 <dbl>, wk13 <dbl>, wk14 <dbl>, wk15 <dbl>,
# wk16 <dbl>, wk17 <dbl>, wk18 <dbl>, wk19 <dbl>, wk20 <dbl>,
# wk21 <dbl>, wk22 <dbl>, wk23 <dbl>, wk24 <dbl>, wk25 <dbl>,
# wk26 <dbl>, wk27 <dbl>, wk28 <dbl>, wk29 <dbl>, wk30 <dbl>,
# wk31 <dbl>, wk32 <dbl>, wk33 <dbl>, wk34 <dbl>, wk35 <dbl>,
# wk36 <dbl>, wk37 <dbl>, wk38 <dbl>, wk39 <dbl>, wk40 <dbl>, ...
billboard %>%
pivot_longer(cols = wk1:wk76, # Or starts_with("wk")
names_to = "week", # 변수 이름 "wk1"~"wk76"이 입력될 새로운 열 이름
names_prefix = "wk", # 변수 week의 입력값에서 "wk" 단어 제외제외
names_transform = list(week = as.integer), # 변수 week의 데이터 유형을 정수형으로 변환NA= "rank", # 변수 "wk1"~"wk76"에 입력된 값들을 합쳐서 나타낼 새로운 열 이름열 이름
values_drop_na = TRUE) %>% # 변수 rank의 NA값 제거거
head(10)
# A tibble: 10 x 5
artist track date.entered week rank
<chr> <chr> <date> <int> <dbl>
1 2 Pac Baby Don't Cry (Keep... 2000-02-26 1 87
2 2 Pac Baby Don't Cry (Keep... 2000-02-26 2 82
3 2 Pac Baby Don't Cry (Keep... 2000-02-26 3 72
4 2 Pac Baby Don't Cry (Keep... 2000-02-26 4 77
5 2 Pac Baby Don't Cry (Keep... 2000-02-26 5 87
6 2 Pac Baby Don't Cry (Keep... 2000-02-26 6 94
7 2 Pac Baby Don't Cry (Keep... 2000-02-26 7 99
8 2Ge+her The Hardest Part Of ... 2000-09-02 1 91
9 2Ge+her The Hardest Part Of ... 2000-09-02 2 87
10 2Ge+her The Hardest Part Of ... 2000-09-02 3 92
Caution!
옵션 names_prefix
는
names_to
에 입력된 열 이름에서
제거하려는 문자열
에 정규표현식을 지정하면 되는데, 첫
문자부터 제거하는 경우에는 그냥 제거하는 문자열을 입력한다. 옵션
names_transform
은 names_to
에 입력된 열 이름의
유형을 변경할 때 사용한다. 또한, values_to
에 입력된
관측값에 NA
값을 제거하기 위해 옵션
values_drop_na = TRUE
을 지정한다.
pivot_wider()
은 하나의 열에 입력된 여러 변수의
데이터를 분리할 때 유용한 함수이다.
pivot_wider(data, names_from = "name", values_from = "value")
data
: 데이터 프레임names_from
: 새롭게 추가되는 열의 이름
이
입력되어 있는 열 이름values_from
:데이터
가 입력되어 있는 열
이름Package
tidyr
에 내장된 데이터 프레임 “table2”의 변수 “type”에 입력되어 있는 두 변수를 분리하기 위해 함수pivot_wider()
적용
table2
# A tibble: 12 x 4
country year type count
<chr> <int> <chr> <int>
1 Afghanistan 1999 cases 745
2 Afghanistan 1999 population 19987071
3 Afghanistan 2000 cases 2666
4 Afghanistan 2000 population 20595360
5 Brazil 1999 cases 37737
6 Brazil 1999 population 172006362
7 Brazil 2000 cases 80488
8 Brazil 2000 population 174504898
9 China 1999 cases 212258
10 China 1999 population 1272915272
11 China 2000 cases 213766
12 China 2000 population 1280428583
table2 %>%
pivot_wider(names_from = "type",
values_from = "count")
# A tibble: 6 x 4
country year cases population
<chr> <int> <int> <int>
1 Afghanistan 1999 745 19987071
2 Afghanistan 2000 2666 20595360
3 Brazil 1999 37737 172006362
4 Brazil 2000 80488 174504898
5 China 1999 212258 1272915272
6 China 2000 213766 1280428583
세 명의 신장과 체중을 입력한 데이터 프레임 df2에서 변수 “type”에 입력되어 있는 두 변수를 분리하기 위해 함수
pivot_wider()
적용
df2 <- data.frame(Name = rep(c("Kim", "Kwon", "Son", "Lim"), each = 2),
type = rep(c("Height", "Weight"), times = 4),
measure = c(175, 75, 165, 55, 168, 53, 150, 46))
df2
Name type measure
1 Kim Height 175
2 Kim Weight 75
3 Kwon Height 165
4 Kwon Weight 55
5 Son Height 168
6 Son Weight 53
7 Lim Height 150
8 Lim Weight 46
df2 %>%
pivot_wider(names_from = "type",
values_from = "measure")
# A tibble: 4 x 3
Name Height Weight
<fct> <dbl> <dbl>
1 Kim 175 75
2 Kwon 165 55
3 Son 168 53
4 Lim 150 46
Package
tidyr
에 내장된 데이터 프레임 “fish_encounters”의 변수 “station”에 입력되어 있는 변수를 분리하기 위해 함수pivot_wider()
적용
fish_encounters
# A tibble: 114 x 3
fish station seen
<fct> <fct> <int>
1 4842 Release 1
2 4842 I80_1 1
3 4842 Lisbon 1
4 4842 Rstr 1
5 4842 Base_TD 1
6 4842 BCE 1
7 4842 BCW 1
8 4842 BCE2 1
9 4842 BCW2 1
10 4842 MAE 1
# ... with 104 more rows
fish_encounters %>%
pivot_wider(names_from = "station",
values_from = "seen",
values_fill = 0) # NA값 0으로 대체체
# A tibble: 19 x 12
fish Release I80_1 Lisbon Rstr Base_TD BCE BCW BCE2 BCW2
<fct> <int> <int> <int> <int> <int> <int> <int> <int> <int>
1 4842 1 1 1 1 1 1 1 1 1
2 4843 1 1 1 1 1 1 1 1 1
3 4844 1 1 1 1 1 1 1 1 1
4 4845 1 1 1 1 1 0 0 0 0
5 4847 1 1 1 0 0 0 0 0 0
6 4848 1 1 1 1 0 0 0 0 0
7 4849 1 1 0 0 0 0 0 0 0
8 4850 1 1 0 1 1 1 1 0 0
9 4851 1 1 0 0 0 0 0 0 0
10 4854 1 1 0 0 0 0 0 0 0
11 4855 1 1 1 1 1 0 0 0 0
12 4857 1 1 1 1 1 1 1 1 1
13 4858 1 1 1 1 1 1 1 1 1
14 4859 1 1 1 1 1 0 0 0 0
15 4861 1 1 1 1 1 1 1 1 1
16 4862 1 1 1 1 1 1 1 1 1
17 4863 1 1 0 0 0 0 0 0 0
18 4864 1 1 0 0 0 0 0 0 0
19 4865 1 1 1 0 0 0 0 0 0
# ... with 2 more variables: MAE <int>, MAW <int>
separate()
는 하나의 문자형 열에 입력된 데이터를
여러 열로 분리하는 데 유용한 함수이다.
separate(data, col, into, sep, remove = TRUE, convert = FALSE)
data
: 데이터 프레임col
: 분리하고 싶은 열into
: 데이터를 분리하여 따로 입력할 열 이름sep
: 구분자remove = TRUE
: col
을 제거할 것인가를
나타내는 논리값convert = FALSE
: 분리 후 데이터의 유형을 바꿀 것인가를
나타내는 논리값Package
tidyr
에 내장된 데이터 프레임 “table3”의 변수 “rate”에 입력되어 있는 두 관측값을 분리하기 위해 함수separate()
적용
table3
# A tibble: 6 x 3
country year rate
* <chr> <int> <chr>
1 Afghanistan 1999 745/19987071
2 Afghanistan 2000 2666/20595360
3 Brazil 1999 37737/172006362
4 Brazil 2000 80488/174504898
5 China 1999 212258/1272915272
6 China 2000 213766/1280428583
# A tibble: 6 x 4
country year cases population
<chr> <int> <chr> <chr>
1 Afghanistan 1999 745 19987071
2 Afghanistan 2000 2666 20595360
3 Brazil 1999 37737 172006362
4 Brazil 2000 80488 174504898
5 China 1999 212258 1272915272
6 China 2000 213766 1280428583
데이터 프레임 “df3”의 변수 “Date”에 입력되어 있는 두 문자열을 분리하기 위해 함수
separate()
적용
df3 <- data.frame(Date = c("2020-Qtr.1", "2020-Qtr.2", "2020-Qtr.3", "2020-Qtr.3"),
Sales = c(102, 95, 119, 99))
df3
Date Sales
1 2020-Qtr.1 102
2 2020-Qtr.2 95
3 2020-Qtr.3 119
4 2020-Qtr.3 99
Year Qtr Sales
1 2020 Qtr.1 102
2 2020 Qtr.2 95
3 2020 Qtr.3 119
4 2020 Qtr.3 99
데이터 프레임 “df4”의 변수 “Date”에 입력되어 있는 두 문자열을 분리하기 위해 함수
separate()
적용
df4 <- data.frame(Date = c("2020Q1", "2020Q2", "2020Q3", "2020Q3"),
Sales = c(102, 95, 119, 99))
df4
Date Sales
1 2020Q1 102
2 2020Q2 95
3 2020Q3 119
4 2020Q3 99
Year Qtr Sales
1 2020 Q1 102
2 2020 Q2 95
3 2020 Q3 119
4 2020 Q3 99
Caution!
옵션 sep
에 양의 정수를 입력하면
왼쪽 끝을 기준으로 입력값 위치에서 분리되고, 음의 정수를 입력하면 오른쪽
끝을 기준으로 입력값의 위치에서 분리된다.
Caution!
함수 separate()
는 하나의 열에
입력된 문자열을 분리하는 데 사용되는 함수이다. 하지만, 하나의 열의
데이터를 분리한 후 다시 하나의 열로 만들고 싶다면 함수
separate_rows(data, 분리하고 싶은 열, sep)
를 사용할 수
있다.
df5 <- data.frame(Contry = c("A", "B", "C"),
Year = 2000,
Rate = c("0.4/0.6", "1.2/0.3", "0.9/1.5"))
df5
Contry Year Rate
1 A 2000 0.4/0.6
2 B 2000 1.2/0.3
3 C 2000 0.9/1.5
df5 %>%
separate_rows("Rate", # 분리하고 싶은 열열
sep = "/") # 구분자
# A tibble: 6 x 3
Contry Year Rate
<fct> <dbl> <chr>
1 A 2000 0.4
2 A 2000 0.6
3 B 2000 1.2
4 B 2000 0.3
5 C 2000 0.9
6 C 2000 1.5
unite()
는 여러 열의 데이터를 하나의 열로 합치는 데
유용한 함수이다.
unite(data, col, ..., sep, remove = TRUE)
data
: 데이터 프레임col
: 합쳐서 새롭게 생성될 열 이름...
: 합쳐질 열sep
: 구분자remove = TRUE
: 합쳐질 열들을 제거할 인가를 나타내는
논리값Package
tidyr
에 내장된 데이터 프레임 “table5”의 변수 “century”과 “year”에 입력되어 있는 두 데이터를 하나의 열로 합치기 위해 함수unite()
적용
table5
# A tibble: 6 x 4
country century year rate
* <chr> <chr> <chr> <chr>
1 Afghanistan 19 99 745/19987071
2 Afghanistan 20 00 2666/20595360
3 Brazil 19 99 37737/172006362
4 Brazil 20 00 80488/174504898
5 China 19 99 212258/1272915272
6 China 20 00 213766/1280428583
table5 %>%
unite(col = year, # 합쳐서 새롭게 생성될 열 이름
century, year, # 합쳐질 열NA= "-")
# A tibble: 6 x 3
country year rate
<chr> <chr> <chr>
1 Afghanistan 19-99 745/19987071
2 Afghanistan 20-00 2666/20595360
3 Brazil 19-99 37737/172006362
4 Brazil 20-00 80488/174504898
5 China 19-99 212258/1272915272
6 China 20-00 213766/1280428583
데이터 프레임 “df6”의 변수 “Year”과 “Qtr”에 입력되어 있는 두 데이터를 하나의 열로 합치기 위해 함수
unite()
적용
df6 <- data.frame(Year = "2020",
Qtr = c("Q1", "Q2", "Q3", "Q4"),
Sales = c(102, 95, 119, 99))
df6
Year Qtr Sales
1 2020 Q1 102
2 2020 Q2 95
3 2020 Q3 119
4 2020 Q4 99
df6 %>%
unite(col = "Date", # 합쳐서 새롭게 생성될 열 이름
Year, Qtr, # 합쳐질 열NA= "/")
Date Sales
1 2020/Q1 102
2 2020/Q2 95
3 2020/Q3 119
4 2020/Q4 99
nest()
는 데이터 프레임의 열을 묶어서
리스트
형태의 열을 생성하는 데 유용한 함수이다.
# A tibble: 3 x 2
# Groups: cyl [3]
cyl data
<dbl> <list>
1 6 <tibble [7 x 10]>
2 4 <tibble [11 x 10]>
3 8 <tibble [14 x 10]>
Result!
변수 “cyl”에 따른 데이터를 리스트 형식의
열(“data”)로 생성하였다.
mtcars_cyl$data
[[1]]
# A tibble: 7 x 10
mpg disp hp drat wt qsec vs am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 21 160 110 3.9 2.62 16.5 0 1 4 4
2 21 160 110 3.9 2.88 17.0 0 1 4 4
3 21.4 258 110 3.08 3.22 19.4 1 0 3 1
4 18.1 225 105 2.76 3.46 20.2 1 0 3 1
5 19.2 168. 123 3.92 3.44 18.3 1 0 4 4
6 17.8 168. 123 3.92 3.44 18.9 1 0 4 4
7 19.7 145 175 3.62 2.77 15.5 0 1 5 6
[[2]]
# A tibble: 11 x 10
mpg disp hp drat wt qsec vs am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 22.8 108 93 3.85 2.32 18.6 1 1 4 1
2 24.4 147. 62 3.69 3.19 20 1 0 4 2
3 22.8 141. 95 3.92 3.15 22.9 1 0 4 2
4 32.4 78.7 66 4.08 2.2 19.5 1 1 4 1
5 30.4 75.7 52 4.93 1.62 18.5 1 1 4 2
6 33.9 71.1 65 4.22 1.84 19.9 1 1 4 1
7 21.5 120. 97 3.7 2.46 20.0 1 0 3 1
8 27.3 79 66 4.08 1.94 18.9 1 1 4 1
9 26 120. 91 4.43 2.14 16.7 0 1 5 2
10 30.4 95.1 113 3.77 1.51 16.9 1 1 5 2
11 21.4 121 109 4.11 2.78 18.6 1 1 4 2
[[3]]
# A tibble: 14 x 10
mpg disp hp drat wt qsec vs am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 18.7 360 175 3.15 3.44 17.0 0 0 3 2
2 14.3 360 245 3.21 3.57 15.8 0 0 3 4
3 16.4 276. 180 3.07 4.07 17.4 0 0 3 3
4 17.3 276. 180 3.07 3.73 17.6 0 0 3 3
5 15.2 276. 180 3.07 3.78 18 0 0 3 3
6 10.4 472 205 2.93 5.25 18.0 0 0 3 4
7 10.4 460 215 3 5.42 17.8 0 0 3 4
8 14.7 440 230 3.23 5.34 17.4 0 0 3 4
9 15.5 318 150 2.76 3.52 16.9 0 0 3 2
10 15.2 304 150 3.15 3.44 17.3 0 0 3 2
11 13.3 350 245 3.73 3.84 15.4 0 0 3 4
12 19.2 400 175 3.08 3.84 17.0 0 0 3 2
13 15.8 351 264 4.22 3.17 14.5 0 1 5 4
14 15 301 335 3.54 3.57 14.6 0 1 5 8
Caution!
리스트 형식의 열을 데이터 프레임의 열로
수정하기 위해서는 함수 unnest()
를 사용하면 된다.
unnest(mtcars_cyl, cols = data)
# A tibble: 32 x 11
# Groups: cyl [3]
cyl mpg disp hp drat wt qsec vs am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 6 21 160 110 3.9 2.62 16.5 0 1 4 4
2 6 21 160 110 3.9 2.88 17.0 0 1 4 4
3 6 21.4 258 110 3.08 3.22 19.4 1 0 3 1
4 6 18.1 225 105 2.76 3.46 20.2 1 0 3 1
5 6 19.2 168. 123 3.92 3.44 18.3 1 0 4 4
6 6 17.8 168. 123 3.92 3.44 18.9 1 0 4 4
7 6 19.7 145 175 3.62 2.77 15.5 0 1 5 6
8 4 22.8 108 93 3.85 2.32 18.6 1 1 4 1
9 4 24.4 147. 62 3.69 3.19 20 1 0 4 2
10 4 22.8 141. 95 3.92 3.15 22.9 1 0 4 2
# ... with 22 more rows
drop_na()
는 결측값 NA
가 포함된 행을
제거하는 데 유용한 함수이다.
drop_na(data, ...)
data
: 데이터 프레임...
: 결측값 NA
를 탐색할 열로서 지정한
열에서 결측값 NA
가 있는 행 제거df7 <- data.frame(x = c(1:4, NA, 5, NA, 6:8, NA),
y = c(1, NA, 10, 8, 3, 5, 8, NA, 0, 2, 2))
df7
x y
1 1 1
2 2 NA
3 3 10
4 4 8
5 NA 3
6 5 5
7 NA 8
8 6 NA
9 7 0
10 8 2
11 NA 2
# 어떤 변수든지 NA가 포함되어 있는 행 모두 제거NAdf7 %>%
drop_na()
x y
1 1 1
2 3 10
3 4 8
4 5 5
5 7 0
6 8 2
# 변수 x의 값이 NA인 행 제거NAdf7 %>%
drop_na(x)
x y
1 1 1
2 2 NA
3 3 10
4 4 8
5 5 5
6 6 NA
7 7 0
8 8 2
replace_na()
는 결측값 NA
를 지정된
값으로 대체하는 데 유용한 함수이다.
replace_na(data, replace)
data
: 데이터 프레임 또는 벡터replace
: 결측값 NA
를 대체할 값
data
가 데이터 프레임이면, 리스트 형태로 각 열에 있는
결측값 NA
를 대체할 값 지정data
가 벡터이면, 하나의 값 지정df7 <- data.frame(x = c(1:4, NA, 5, NA, 6:8, NA),
y = c(1, NA, 10, 8, 3, 5, 8, NA, 0, 2, 2))
df7
x y
1 1 1
2 2 NA
3 3 10
4 4 8
5 NA 3
6 5 5
7 NA 8
8 6 NA
9 7 0
10 8 2
11 NA 2
df7 %>%
replace_na(list(x = 5))
x y
1 1 1
2 2 NA
3 3 10
4 4 8
5 5 3
6 5 5
7 5 8
8 6 NA
9 7 0
10 8 2
11 5 2
df7 %>%
replace_na(list(x = 5,
y = 7))
x y
1 1 1
2 2 7
3 3 10
4 4 8
5 5 3
6 5 5
7 5 8
8 6 7
9 7 0
10 8 2
11 5 2
Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".