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() 함수에 인수를 설정하여 출력 형식을 변경할 수 있습니다.
::flights %>%
nycflights13print(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() 함수를 이용하여 규모가 큰 티블을 화면출력할 수 있습니다.
::flights %>%
nycflights13View()
11.2.2 서브 세팅
단일 변수를 가져 오려면 다른 데이터 구조를 서브 세팅/인덱하는 데 사용한 것과 동일한 $
와 [[
등의 도구가 필요합니다. [[
는 이름이나 위치로 추출 할 수 있습니다. $
는 이름으로만 추출할 수 있습니다.
# 티블을 생성합니다.
set.seed(1234)
<- tibble(
df g = c("A", "B", "A", "B", "A"),
x = runif(5),
y = rnorm(5)
)
# 컬럼의 이름을 이용하여 서브세팅할 수 있습니다.
$x df
## [1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154
"x"]] df[[
## [1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154
# 컬럼의 위치 번호를 이용하여 서브세팅할 수 있습니다.
1]] # 1번째 컬럼 즉 x 컬럼을 추출합니다. df[[
## [1] "A" "B" "A" "B" "A"
파이프 연산자와 함께 사용하려면 특수 위치 표시자인 .
기호를 를 사용해야합니다.
# 파이프 연산자와 . 기호를 사용할 수 있습니다.
%>% .$x df
## [1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154
%>% .[["x"]] df
## [1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154
# 파이프 연산자를 이용하여 티블의 요약 통계 정보를 보여줄 수 있습니다.
%>% group_by(g) %>% summarise(m.x = mean(x),
df 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
데이터 프레임에 비해 티블은 서브 세팅하는데 있어서 더 엄격합니다. 열 제목에 대한 부분 일치를 수행하지 않습니다. 그리고 접근 하려는 열이 존재하지 않으면 경고를 생성합니다.