tidyr Utilities

by Minho Lee — on  ,  ,  , 

cover-image

tidyr Utilities

tidyr 패키지에서 가장 중심이 되는 기능은 gatherspread를 이용한 데이터 형태 변환이다. 하지만 이전 포스팅에서도 다루었지만, NA를 처리하는 replace_nafill 등 데이터를 편리하게 정제할 수 있는 도구들을 제공하기도 한다. 여기서는 이전까지의 글에서 다루지 않았던 tidyr의 다른 기능에 대해서 살펴보려고 한다.

Tidyr과 관련된 이전 포스팅

Tidy Data

relace_na with 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 라는 함수로 제공한다. expandreplace_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 데이터의 vsam 열을 합쳐서 vs_am이라는 새로운 열을 만든다. unitesep 기본값이 _이기 때문에 두 열의 값 사이에 _ 이 들어간 형태로 합쳐진다

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


문자열을 쪼갤 때 원하는 개수의 조각으로 쪼개지지 않을 수도 있다. 이러한 경우 extrafill 옵션을 사용하면 각각의 상황에 대해서 대응하는 방식을 정해줄 수 있다

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>

Comments