
tidyr Utilities
tidyr 패키지에서 가장 중심이 되는 기능은 gather와 spread를 이용한 데이터 형태 변환이다. 하지만 이전 포스팅에서도 다루었지만, NA를 처리하는 replace_na나 fill 등 데이터를 편리하게 정제할 수 있는 도구들을 제공하기도 한다. 여기서는 이전까지의 글에서 다루지 않았던 tidyr의 다른 기능에 대해서 살펴보려고 한다.
Tidyr과 관련된 이전 포스팅
library(tidyr)
library(dplyr)
expand()
expand함수는 선택한 변수들의 조합을 만들어낸다
어떠한 형태로 사용하는지에 따라서 데이터에 존재하는 조합만 생성할 수도 있고, 데이터와 무관하게 각 변수들로 만들어 낼 수 있는 모든 조합을 생성할 수도 있다.
우선 실습을 위해 mtcars 데이터를 사용한다
print(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
expand(데이터, 열 이름들)의 형태로 사용하면 해당 변수들로 만들 수 있는 모든 조합을 생성한다(데이터에는 없더라도)
expand(mtcars, vs, cyl)
## Source: local data frame [6 x 2]
##
## vs cyl
## (dbl) (dbl)
## 1 0 4
## 2 0 6
## 3 0 8
## 4 1 4
## 5 1 6
## 6 1 8
변수를 c()로 묶으면 데이터에 존재하는 조합만 생성한다
expand(mtcars, c(vs, cyl))
## vs cyl
## 1 0 4
## 2 0 6
## 3 0 8
## 4 1 4
## 5 1 6
두 방식을 섞어서 사용할 수도 있다. 아래와 같이 사용하면 vs, cyl에 대해서는 데이터에 존재하는 조합만 만들고 am에 대해서는 데이터에 없는 조합까지 생성한다
expand(mtcars, c(vs, cyl), am)
## Source: local data frame [10 x 3]
##
## vs cyl am
## (dbl) (dbl) (dbl)
## 1 0 4 0
## 2 0 4 1
## 3 0 6 0
## 4 0 6 1
## 5 0 8 0
## 6 0 8 1
## 7 1 4 0
## 8 1 4 1
## 9 1 6 0
## 10 1 6 1
모든 변수를 c로 묶으면 데이터에 존재하는 조합만 생성된다
expand(mtcars, c(vs, cyl, am))
## vs cyl am
## 1 0 4 1
## 2 0 6 1
## 3 0 8 0
## 4 0 8 1
## 5 1 4 0
## 6 1 4 1
## 7 1 6 0
expand 함수를 사용하면 원하는 변수의 모든 조합에 대한 테이블을 생성할 수 있다. 데이터에 없는 부분은 NA로 처리하고 존재하는 조합에만 데이터를 넣으면 된다.
expand 함수를 사용해서 원하는 변수 조합에 대한 data.frame을 생성한 다음에 원본 데이터를 left_join 시키면 원하는 모든 조합을 표시하는 테이블이 생성된다. NA값을 0으로 변환시키기 위해서 replace_na 함수를 사용할 수 있다.
expand(mtcars, vs, cyl, am) %>%
left_join(mtcars, by=c("vs", "cyl", "am")) %>%
replace_na(
list(mpg = 0, disp = 0, hp = 0, drat = 0, wt = 0, qsec = 0, gear = 0, carb = 0)
)
## Source: local data frame [37 x 11]
##
## vs cyl am mpg disp hp drat wt qsec gear carb
## (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl)
## 1 0 4 0 0.0 0.0 0 0.00 0.000 0.00 0 0
## 2 0 4 1 26.0 120.3 91 4.43 2.140 16.70 5 2
## 3 0 6 0 0.0 0.0 0 0.00 0.000 0.00 0 0
## 4 0 6 1 21.0 160.0 110 3.90 2.620 16.46 4 4
## 5 0 6 1 21.0 160.0 110 3.90 2.875 17.02 4 4
## 6 0 6 1 19.7 145.0 175 3.62 2.770 15.50 5 6
## 7 0 8 0 18.7 360.0 175 3.15 3.440 17.02 3 2
## 8 0 8 0 14.3 360.0 245 3.21 3.570 15.84 3 4
## 9 0 8 0 16.4 275.8 180 3.07 4.070 17.40 3 3
## 10 0 8 0 17.3 275.8 180 3.07 3.730 17.60 3 3
## .. ... ... ... ... ... ... ... ... ... ... ...
tidyr에서는 이 세 가지 과정을 하나로 묶어서 complete 라는 함수로 제공한다. expand와 replace_na의 문법이 섞인 형태로 사용할 수 있다.
complete(mtcars,
vs, cyl, am,
fill = list(mpg = 0,
disp = 0,
hp = 0,
drat = 0,
wt = 0,
qsec = 0,
gear = 0,
carb = 0))
## Source: local data frame [37 x 11]
##
## vs cyl am mpg disp hp drat wt qsec gear carb
## (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl)
## 1 0 4 0 0.0 0.0 0 0.00 0.000 0.00 0 0
## 2 0 4 1 26.0 120.3 91 4.43 2.140 16.70 5 2
## 3 0 6 0 0.0 0.0 0 0.00 0.000 0.00 0 0
## 4 0 6 1 21.0 160.0 110 3.90 2.620 16.46 4 4
## 5 0 6 1 21.0 160.0 110 3.90 2.875 17.02 4 4
## 6 0 6 1 19.7 145.0 175 3.62 2.770 15.50 5 6
## 7 0 8 0 18.7 360.0 175 3.15 3.440 17.02 3 2
## 8 0 8 0 14.3 360.0 245 3.21 3.570 15.84 3 4
## 9 0 8 0 16.4 275.8 180 3.07 4.070 17.40 3 3
## 10 0 8 0 17.3 275.8 180 3.07 3.730 17.60 3 3
## .. ... ... ... ... ... ... ... ... ... ... ...
nest
어떤 그룹을 기준으로 반복되는 값들을 list-variable 형태로 정리한다. 그룹을 중심으로 데이터를 좀 더 압축적으로 살펴볼 수 있게 된다
list의 형태로 표현할 열들을 nest 함수의 인자로 하면 된다. 아래 코드에서는 Species함수를 제외한 다른 열의 값을 리스트로 변경한다
iris %>% nest(-Species)
## Source: local data frame [3 x 5]
## Groups: <by row>
##
## Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## (fctr) (chr) (chr) (chr) (chr)
## 1 setosa <dbl[50]> <dbl[50]> <dbl[50]> <dbl[50]>
## 2 versicolor <dbl[50]> <dbl[50]> <dbl[50]> <dbl[50]>
## 3 virginica <dbl[50]> <dbl[50]> <dbl[50]> <dbl[50]>
데이터를 nest시킨 이후에는 list 형태로 데이터를 활용할 수 있다.
nested_iris = iris %>% nest(-Species)
nested_iris$Sepal.Length
## [[1]]
## [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4
## [18] 5.1 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5
## [35] 4.9 5.0 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6 5.3 5.0
##
## [[2]]
## [1] 7.0 6.4 6.9 5.5 6.5 5.7 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1 5.6 6.7 5.6
## [18] 5.8 6.2 5.6 5.9 6.1 6.3 6.1 6.4 6.6 6.8 6.7 6.0 5.7 5.5 5.5 5.8 6.0
## [35] 5.4 6.0 6.7 6.3 5.6 5.5 5.5 6.1 5.8 5.0 5.6 5.7 5.7 6.2 5.1 5.7
##
## [[3]]
## [1] 6.3 5.8 7.1 6.3 6.5 7.6 4.9 7.3 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5
## [18] 7.7 7.7 6.0 6.9 5.6 7.7 6.3 6.7 7.2 6.2 6.1 6.4 7.2 7.4 7.9 6.4 6.3
## [35] 6.1 7.7 6.3 6.4 6.0 6.9 6.7 6.9 5.8 6.8 6.7 6.7 6.3 6.5 6.2 5.9
여러 개의 변수를 기준으로 하여 nest시킬 수도 있다. 이 경우 dplyr::select의 열 선택 방식을 사용할 수 있다. 아래의 두 가지 코드는 같은 결과물을 가진다.
mtcars %>% nest(-vs, -am, -gear, -carb)
## Source: local data frame [14 x 11]
## Groups: <by row>
##
## vs am gear carb mpg cyl disp hp drat
## (dbl) (dbl) (dbl) (dbl) (chr) (chr) (chr) (chr) (chr)
## 1 0 0 3 2 <dbl[4]> <dbl[4]> <dbl[4]> <dbl[4]> <dbl[4]>
## 2 0 0 3 3 <dbl[3]> <dbl[3]> <dbl[3]> <dbl[3]> <dbl[3]>
## 3 0 0 3 4 <dbl[5]> <dbl[5]> <dbl[5]> <dbl[5]> <dbl[5]>
## 4 0 1 4 4 <dbl[2]> <dbl[2]> <dbl[2]> <dbl[2]> <dbl[2]>
## 5 0 1 5 2 <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]>
## 6 0 1 5 4 <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]>
## 7 0 1 5 6 <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]>
## 8 0 1 5 8 <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]>
## 9 1 0 3 1 <dbl[3]> <dbl[3]> <dbl[3]> <dbl[3]> <dbl[3]>
## 10 1 0 4 2 <dbl[2]> <dbl[2]> <dbl[2]> <dbl[2]> <dbl[2]>
## 11 1 0 4 4 <dbl[2]> <dbl[2]> <dbl[2]> <dbl[2]> <dbl[2]>
## 12 1 1 4 1 <dbl[4]> <dbl[4]> <dbl[4]> <dbl[4]> <dbl[4]>
## 13 1 1 4 2 <dbl[2]> <dbl[2]> <dbl[2]> <dbl[2]> <dbl[2]>
## 14 1 1 5 2 <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]>
## Variables not shown: wt (chr), qsec (chr)
mtcars %>% nest(-vs:-carb)
## Source: local data frame [14 x 11]
## Groups: <by row>
##
## vs am gear carb mpg cyl disp hp drat
## (dbl) (dbl) (dbl) (dbl) (chr) (chr) (chr) (chr) (chr)
## 1 0 0 3 2 <dbl[4]> <dbl[4]> <dbl[4]> <dbl[4]> <dbl[4]>
## 2 0 0 3 3 <dbl[3]> <dbl[3]> <dbl[3]> <dbl[3]> <dbl[3]>
## 3 0 0 3 4 <dbl[5]> <dbl[5]> <dbl[5]> <dbl[5]> <dbl[5]>
## 4 0 1 4 4 <dbl[2]> <dbl[2]> <dbl[2]> <dbl[2]> <dbl[2]>
## 5 0 1 5 2 <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]>
## 6 0 1 5 4 <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]>
## 7 0 1 5 6 <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]>
## 8 0 1 5 8 <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]>
## 9 1 0 3 1 <dbl[3]> <dbl[3]> <dbl[3]> <dbl[3]> <dbl[3]>
## 10 1 0 4 2 <dbl[2]> <dbl[2]> <dbl[2]> <dbl[2]> <dbl[2]>
## 11 1 0 4 4 <dbl[2]> <dbl[2]> <dbl[2]> <dbl[2]> <dbl[2]>
## 12 1 1 4 1 <dbl[4]> <dbl[4]> <dbl[4]> <dbl[4]> <dbl[4]>
## 13 1 1 4 2 <dbl[2]> <dbl[2]> <dbl[2]> <dbl[2]> <dbl[2]>
## 14 1 1 5 2 <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]> <dbl[1]>
## Variables not shown: wt (chr), qsec (chr)
nest를 해제하려면 unnest 함수를 사용한다
nested_iris %>% unnest
## Source: local data frame [150 x 5]
##
## Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## (fctr) (dbl) (dbl) (dbl) (dbl)
## 1 setosa 5.1 3.5 1.4 0.2
## 2 setosa 4.9 3.0 1.4 0.2
## 3 setosa 4.7 3.2 1.3 0.2
## 4 setosa 4.6 3.1 1.5 0.2
## 5 setosa 5.0 3.6 1.4 0.2
## 6 setosa 5.4 3.9 1.7 0.4
## 7 setosa 4.6 3.4 1.4 0.3
## 8 setosa 5.0 3.4 1.5 0.2
## 9 setosa 4.4 2.9 1.4 0.2
## 10 setosa 4.9 3.1 1.5 0.1
## .. ... ... ... ... ...
extract
extract 함수는 정규표현식을 통해 원하는 값만 추출해서 새로운 열을 만들어준다
extract(데이터, 대상 열, 생성할 열 이름, 정규표현식)의 형태로 사용한다
mtcars에서 자동차 모델 중 일부의 이름을 따로 data.frame으로 저장해서 실습하려고 한다.
mtcars_name = data.frame(name = row.names(mtcars)[c(8:14,19:21)])
mtcars_name
## name
## 1 Merc 240D
## 2 Merc 230
## 3 Merc 280
## 4 Merc 280C
## 5 Merc 450SE
## 6 Merc 450SL
## 7 Merc 450SLC
## 8 Honda Civic
## 9 Toyota Corolla
## 10 Toyota Corona
기본값은 영문자와 숫자를 포함하는 문자열만을 추출한다. 따라서 아래 예제에서는 공백이 나오기 전까지의 문자열을 추출하게 된다
mtcars_name %>%
extract(name, "Brand")
## Brand
## 1 Merc
## 2 Merc
## 3 Merc
## 4 Merc
## 5 Merc
## 6 Merc
## 7 Merc
## 8 Honda
## 9 Toyota
## 10 Toyota
여기서는 정규표현식을 자세히 설명하지 않기 때문에 자세한 동작 원리에 대해서는 언급하지 않는다. 간단하게 설명하면 아래의 예제에서 세 번째 인자인 정규표현식은 (첫 번째 패턴)구분자(두 번째 패턴) 의 형태로 되어있다.
첫 번째 패턴에 해당하는 결과가 "Brand" 열에 들어가고, 두 번째 패턴에 해당하는 결과는 "Name" 열에 입력된다. 그리고 각각의 패턴은 영문자 또는 숫자인 문자열만 찾도록 되어있다.
R에서 정규표현식에 대한 도움말은 ?regex를 참고하자
mtcars_name %>%
extract(name, c("Brand", "Name"), "([[:alnum:]]+) ([[:alnum:]]+)")
## Brand Name
## 1 Merc 240D
## 2 Merc 230
## 3 Merc 280
## 4 Merc 280C
## 5 Merc 450SE
## 6 Merc 450SL
## 7 Merc 450SLC
## 8 Honda Civic
## 9 Toyota Corolla
## 10 Toyota Corona
unite
두 열을 하나의 열로 합쳐준다. dplyr의 mutate 함수를 통해 두 열을 paste 하는 것과 비슷한 효과를 낸다
unite(데이터프레임, 결과물의 열 이름, 합칠 열 이름들)의 형태로 사용한다
아래 코드는 mtcars 데이터의 vs와 am 열을 합쳐서 vs_am이라는 새로운 열을 만든다. unite 의 sep 기본값이 _이기 때문에 두 열의 값 사이에 _ 이 들어간 형태로 합쳐진다
unite(mtcars, vs_am, vs, am)
## mpg cyl disp hp drat wt qsec vs_am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0_1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0_1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1_1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1_0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0_0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1_0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0_0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1_0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1_0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1_0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1_0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0_0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0_0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0_0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0_0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0_0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0_0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1_1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1_1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1_1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1_0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0_0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0_0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0_0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0_0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1_1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0_1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1_1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0_1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0_1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0_1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1_1 4 2
unite(mtcars, vs_am, vs, am, sep = "x")
## mpg cyl disp hp drat wt qsec vs_am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0x1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0x1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1x1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1x0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0x0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1x0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0x0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1x0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1x0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1x0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1x0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0x0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0x0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0x0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0x0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0x0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0x0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1x1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1x1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1x1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1x0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0x0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0x0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0x0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0x0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1x1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0x1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1x1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0x1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0x1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0x1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1x1 4 2
SE버전의 함수를 사용하려면 unite_ 함수를 사용한다. 열이름을 문자열의 형태로 전달할 수 있다
unite_(mtcars, "vs_am", c("vs", "am"))
## mpg cyl disp hp drat wt qsec vs_am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0_1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0_1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1_1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1_0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0_0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1_0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0_0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1_0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1_0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1_0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1_0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0_0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0_0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0_0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0_0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0_0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0_0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1_1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1_1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1_1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1_0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0_0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0_0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0_0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0_0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1_1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0_1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1_1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0_1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0_1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0_1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1_1 4 2
unite_(mtcars, "vs_am", c("vs", "am"), sep = "x")
## mpg cyl disp hp drat wt qsec vs_am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0x1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0x1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1x1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1x0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0x0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1x0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0x0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1x0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1x0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1x0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1x0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0x0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0x0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0x0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0x0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0x0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0x0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1x1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1x1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1x1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1x0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0x0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0x0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0x0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0x0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1x1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0x1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1x1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0x1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0x1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0x1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1x1 4 2
3개 이상의 변수를 합칠 수도 있다
unite(mtcars, vagc, vs, am, gear, carb)
## mpg cyl disp hp drat wt qsec vagc
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0_1_4_4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0_1_4_4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1_1_4_1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1_0_3_1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0_0_3_2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1_0_3_1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0_0_3_4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1_0_4_2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1_0_4_2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1_0_4_4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1_0_4_4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0_0_3_3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0_0_3_3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0_0_3_3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0_0_3_4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0_0_3_4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0_0_3_4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1_1_4_1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1_1_4_2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1_1_4_1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1_0_3_1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0_0_3_2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0_0_3_2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0_0_3_4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0_0_3_2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1_1_4_1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0_1_5_2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1_1_5_2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0_1_5_4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0_1_5_6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0_1_5_8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1_1_4_2
dplyr::select 함수에서 지원하는 열 선택 방식을 지원한다. 자세한 내용은 dplyr::select 함수의 도움말에서 확인할 수 있다.
unite(mtcars, vagc, vs:carb)
## mpg cyl disp hp drat wt qsec vagc
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0_1_4_4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0_1_4_4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1_1_4_1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1_0_3_1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0_0_3_2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1_0_3_1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0_0_3_4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1_0_4_2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1_0_4_2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1_0_4_4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1_0_4_4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0_0_3_3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0_0_3_3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0_0_3_3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0_0_3_4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0_0_3_4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0_0_3_4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1_1_4_1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1_1_4_2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1_1_4_1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1_0_3_1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0_0_3_2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0_0_3_2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0_0_3_4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0_0_3_2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1_1_4_1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0_1_5_2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1_1_5_2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0_1_5_4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0_1_5_6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0_1_5_8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1_1_4_2
기본적으로는 열을 합치면 합치는데 사용한 원본 열은 삭제하게끔 되어있다. 원본 열들을 남기고 싶다면 remove = FALSE 옵션을 사용한다
unite(mtcars, vagc, vs:carb, remove = FALSE)
## mpg cyl disp hp drat wt qsec vagc vs am gear
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0_1_4_4 0 1 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0_1_4_4 0 1 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1_1_4_1 1 1 4
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1_0_3_1 1 0 3
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0_0_3_2 0 0 3
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1_0_3_1 1 0 3
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0_0_3_4 0 0 3
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1_0_4_2 1 0 4
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1_0_4_2 1 0 4
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1_0_4_4 1 0 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1_0_4_4 1 0 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0_0_3_3 0 0 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0_0_3_3 0 0 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0_0_3_3 0 0 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0_0_3_4 0 0 3
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0_0_3_4 0 0 3
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0_0_3_4 0 0 3
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1_1_4_1 1 1 4
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1_1_4_2 1 1 4
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1_1_4_1 1 1 4
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1_0_3_1 1 0 3
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0_0_3_2 0 0 3
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0_0_3_2 0 0 3
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0_0_3_4 0 0 3
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0_0_3_2 0 0 3
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1_1_4_1 1 1 4
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0_1_5_2 0 1 5
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1_1_5_2 1 1 5
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0_1_5_4 0 1 5
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0_1_5_6 0 1 5
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0_1_5_8 0 1 5
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1_1_4_2 1 1 4
## carb
## Mazda RX4 4
## Mazda RX4 Wag 4
## Datsun 710 1
## Hornet 4 Drive 1
## Hornet Sportabout 2
## Valiant 1
## Duster 360 4
## Merc 240D 2
## Merc 230 2
## Merc 280 4
## Merc 280C 4
## Merc 450SE 3
## Merc 450SL 3
## Merc 450SLC 3
## Cadillac Fleetwood 4
## Lincoln Continental 4
## Chrysler Imperial 4
## Fiat 128 1
## Honda Civic 2
## Toyota Corolla 1
## Toyota Corona 1
## Dodge Challenger 2
## AMC Javelin 2
## Camaro Z28 4
## Pontiac Firebird 2
## Fiat X1-9 1
## Porsche 914-2 2
## Lotus Europa 2
## Ford Pantera L 4
## Ferrari Dino 6
## Maserati Bora 8
## Volvo 142E 2
separate
unite 함수와는 반대로 열을 쪼개는 역할을 한다. 기본적으로는 영문자와 숫자가 아닌 값을 기준으로 열을 구분한다. unite 함수에서 기본값으로 _를 사용해 문자열을 합쳤기 때문에 간단하게 원래 상태로 돌릴 수 있다. 구분자가 정해져있는 경우에는 직접 sep 옵션에 값을 지정하면 된다.
separate(데이터, 분리시킬 열 이름, 새롭게 생성할 열 이름들)의 형태로 사용한다
unite(mtcars, vagc, vs:carb) %>%
separate(vagc, c("vs", "am", "gear", "carb"))
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
문자열을 쪼갤 때 원하는 개수의 조각으로 쪼개지지 않을 수도 있다. 이러한 경우 extra와 fill 옵션을 사용하면 각각의 상황에 대해서 대응하는 방식을 정해줄 수 있다
extra는 지정했던 열 개수보다 많은 개수로 쪼개졌을 경우
fill은 지정했던 열 개수보다 적은 개수로 쪼개졌을 경우에 대한 대응 방식을 나타낸다
양쪽 모두 기본값은 "warn" 으로, 경고메세지를 출력한다. extra는 여분의 데이터를 버리고, fill은 오른쪽부터 모자란 열에 NA값을 채운다.
data.frame(x = c("x: 123", "y: error: 7")) %>%
separate(x, c("key", "value"), ": ", extra = "warn")
## Warning: Too many values at 1 locations: 2
## key value
## 1 x 123
## 2 y error
data.frame(x = c("x: 123", "y")) %>%
separate(x, c("key", "value"), ": ", fill = "warn")
## Warning: Too few values at 1 locations: 2
## key value
## 1 x 123
## 2 y <NA>