11.2 데이터 프레임과 티블의 비교

티블과 전통적인 데이터 프레임의 사용에는 화면 출력 형태서브 세팅의 두 가지 주요한 차이점이 있습니다.

11.2.1 화면 출력

티블은 화면의 크기에 맞춰 화면에 출력되는 열의 수를 자동제어하고, 데이터 행도 처음 10 개 행만 표시하는 세련된 인쇄 방법이 있습니다. 이렇게 하면 대용량 데이터 작업이 훨씬 쉬워집니다. 이름 외에도 각 열에는 str() 함수에서 차용한 멋진 기능인 각 컬럼의 데이터 유형을 표시해 줍니다.

set.seed(1234)

tibble(
  a = lubridate::now() + runif(1e3) * 86400,
  b = lubridate::today() + runif(1e3) * 30,
  c = 1:1e3,
  d = runif(1e3),
  e = sample(letters, 1e3, replace = TRUE)
)
## # A tibble: 1,000 x 5
##    a                   b              c      d e    
##    <dttm>              <date>     <int>  <dbl> <chr>
##  1 2021-02-08 19:34:09 2021-03-05     1 0.114  o    
##  2 2021-02-09 07:46:32 2021-02-22     2 0.192  o    
##  3 2021-02-09 07:27:47 2021-02-11     3 0.618  r    
##  4 2021-02-09 07:48:05 2021-02-18     4 0.599  n    
##  5 2021-02-09 13:30:09 2021-03-02     5 0.0619 z    
##  6 2021-02-09 08:12:28 2021-02-19     6 0.699  z    
##  7 2021-02-08 17:04:06 2021-02-21     7 0.737  u    
##  8 2021-02-08 22:25:18 2021-02-11     8 0.0233 o    
##  9 2021-02-09 08:49:35 2021-03-08     9 0.759  x    
## 10 2021-02-09 05:10:57 2021-03-09    10 0.362  v    
## # ... with 990 more rows

티블은 대용량 데이터 프레임을 인쇄할 때 실수로 콘솔에 부담을 주지 않도록 설계되었습니다. 그러나 때로는 기본 디스플레이보다 더 많은 출력이 필요할 수 있는데 이럴 때 사용할 수 있는 몇 가지 옵션이 있습니다.

첫째, 명시적으로 print() 함수를 이용하여 데이터 프레임을 출력할 수 있습니다. 이때 행의 수 (n = 인수)와 화면의 너비를 제어할 수 있습니다. width = Inf 인수를 설정하면 모든 열을 표시합니다.

다음의 예는 nycflights13 패키지에서 제공하고 있는 flights 데이터 세트의 화면 출력을 제어하는 예입니다.

# 규모가 큰 티블의 경우 print() 함수에 인수를 설정하여 출력 형식을 변경할 수 있습니다.
nycflights13::flights %>% 
          print(n = 10, width = Inf)
## # A tibble: 336,776 x 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     1      517            515         2      830            819
##  2  2013     1     1      533            529         4      850            830
##  3  2013     1     1      542            540         2      923            850
##  4  2013     1     1      544            545        -1     1004           1022
##  5  2013     1     1      554            600        -6      812            837
##  6  2013     1     1      554            558        -4      740            728
##  7  2013     1     1      555            600        -5      913            854
##  8  2013     1     1      557            600        -3      709            723
##  9  2013     1     1      557            600        -3      838            846
## 10  2013     1     1      558            600        -2      753            745
##    arr_delay carrier flight tailnum origin dest  air_time distance  hour minute
##        <dbl> <chr>    <int> <chr>   <chr>  <chr>    <dbl>    <dbl> <dbl>  <dbl>
##  1        11 UA        1545 N14228  EWR    IAH        227     1400     5     15
##  2        20 UA        1714 N24211  LGA    IAH        227     1416     5     29
##  3        33 AA        1141 N619AA  JFK    MIA        160     1089     5     40
##  4       -18 B6         725 N804JB  JFK    BQN        183     1576     5     45
##  5       -25 DL         461 N668DN  LGA    ATL        116      762     6      0
##  6        12 UA        1696 N39463  EWR    ORD        150      719     5     58
##  7        19 B6         507 N516JB  EWR    FLL        158     1065     6      0
##  8       -14 EV        5708 N829AS  LGA    IAD         53      229     6      0
##  9        -8 B6          79 N593JB  JFK    MCO        140      944     6      0
## 10         8 AA         301 N3ALAA  LGA    ORD        138      733     6      0
##    time_hour          
##    <dttm>             
##  1 2013-01-01 05:00:00
##  2 2013-01-01 05:00:00
##  3 2013-01-01 05:00:00
##  4 2013-01-01 05:00:00
##  5 2013-01-01 06:00:00
##  6 2013-01-01 05:00:00
##  7 2013-01-01 06:00:00
##  8 2013-01-01 06:00:00
##  9 2013-01-01 06:00:00
## 10 2013-01-01 06:00:00
## # ... with 336,766 more rows

또한 options() 함수내의 인수를 설정하여 기본 인쇄 동작을 제어할 수도 있습니다.

  • options(tibble.print_max = n, tibble.print_min = m): 티블이 m 행 이상이면 n 행만 출력합니다.
  • options (dplyr.print_min = Inf) : 항상 모든 행을 표시합니다.
  • options (tibble.width = Inf) : 화면 너비에 관계없이 항상 모든 열을 인쇄합니다.

package? tibble의 패키지 도움말을 보면 전체 옵션 목록을 볼 수 있습니다.

마지막 옵션은 View() 함수를 이용하여 RStudio에 내장되어 있는 데이터 뷰어를 사용하여 전체 데이터 세트를 스크롤 가능한 보기로 보는 것입니다.

# View() 함수를 이용하여 규모가 큰 티블을 화면출력할 수 있습니다.
nycflights13::flights %>% 
  View()

11.2.2 서브 세팅

단일 변수를 가져 오려면 다른 데이터 구조를 서브 세팅/인덱하는 데 사용한 것과 동일한 $[[ 등의 도구가 필요합니다. [[는 이름이나 위치로 추출 할 수 있습니다. $는 이름으로만 추출할 수 있습니다.

# 티블을 생성합니다.
set.seed(1234)
df <- tibble(
  g = c("A", "B", "A", "B", "A"),
  x = runif(5),
  y = rnorm(5)
)

# 컬럼의 이름을 이용하여 서브세팅할 수 있습니다.
df$x
## [1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154
df[["x"]]
## [1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154
# 컬럼의 위치 번호를 이용하여 서브세팅할 수 있습니다.
df[[1]]                              # 1번째 컬럼 즉 x 컬럼을 추출합니다.
## [1] "A" "B" "A" "B" "A"

파이프 연산자와 함께 사용하려면 특수 위치 표시자인 .기호를 를 사용해야합니다.

# 파이프 연산자와 . 기호를 사용할 수 있습니다.
df %>% .$x
## [1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154
df %>% .[["x"]]
## [1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154
# 파이프 연산자를 이용하여 티블의 요약 통계 정보를 보여줄 수 있습니다.
df %>% group_by(g) %>% summarise(m.x = mean(x), 
                                 m.y = mean(y), 
                                 n = n())
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 2 x 4
##   g       m.x    m.y     n
##   <chr> <dbl>  <dbl> <int>
## 1 A     0.528  0.608     3
## 2 B     0.623 -0.309     2

데이터 프레임에 비해 티블은 서브 세팅하는데 있어서 더 엄격합니다. 열 제목에 대한 부분 일치를 수행하지 않습니다. 그리고 접근 하려는 열이 존재하지 않으면 경고를 생성합니다.