library(tidyverse)
as_tibble(iris)
## # A tibble: 150 x 5
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## <dbl> <dbl> <dbl> <dbl> <fct>
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## # ... with 140 more rows
tibble(
x = 1:5,
y = 1,
z = x ^ 2 + y
)
## # A tibble: 5 x 3
## x y z
## <int> <dbl> <dbl>
## 1 1 1 2
## 2 2 1 5
## 3 3 1 10
## 4 4 1 17
## 5 5 1 26
tibble()은 동작의 규모가 훨씬 작다는 것에 주의해야 한다.
입력의 유형을 절대로 변경하지 않고, 변수의 이름을 바꾸거나 행 이름을 생성하지 않는다.
티블은 R 변수명으로는 유효하지 않은 이름도 열 이름으로 가질 수 있다.
문자로 시작하지 않거나 공백과 같은 비정상적인 문자가 포함될 수 있다.
이 변수들을 참조하려면 역따옴표로 감싸야 한다.
tb <- tibble(
`:)` = "스마일",
` ` = "스페이스",
`2000` = "숫자"
)
tb
## # A tibble: 1 x 3
## `:)` ` ` `2000`
## <chr> <chr> <chr>
## 1 스마일 스페이스 숫자
ggplot2, dplyr, tidyr 과 같은 패키지에서 이러한 변수로 작업할 때도 역따옴표가 필요하다.
티블을 만드는 또 다른 방법은 tribble()을 사용하는 것이다.
Tribble()은 코드로 데이터를 입력하기 위해 고안되었다.
열 헤더는 공식으로 정의되고(~시작), 입력은 쉼표로 구분된다.
tribble(
~x, ~y, ~z,
#--|--|----
"a", 2, 3.6,
"b", 1, 8.5
)
## # A tibble: 2 x 3
## x y z
## <chr> <dbl> <dbl>
## 1 a 2 3.6
## 2 b 1 8.5
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 2020-10-06 19:29:51 2020-10-20 1 0.0654 u
## 2 2020-10-06 19:22:04 2020-10-24 2 0.0323 q
## 3 2020-10-07 06:04:40 2020-10-15 3 0.885 i
## 4 2020-10-07 09:52:26 2020-10-14 4 0.180 m
## 5 2020-10-07 06:40:49 2020-11-03 5 0.214 l
## 6 2020-10-07 06:42:19 2020-10-17 6 0.455 x
## 7 2020-10-06 20:06:25 2020-10-08 7 0.164 d
## 8 2020-10-07 12:53:20 2020-10-08 8 0.485 m
## 9 2020-10-07 06:14:21 2020-10-29 9 0.937 l
## 10 2020-10-06 22:14:02 2020-10-09 10 0.677 n
## # ... with 990 more rows
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(tibble.print_max = n, tibble.print_min = m): m행 이상인 경우, n행만 출력한다. 모든 행을 항상 표시하려면 option(dplyr.print_min = Inf)을 사용
Option(tibble.width = Inf): 화면 너비와 상관없이 항상 모든 열을 출력한다.
package?tibble패키지 도움말을 찾아보면 옵션의 전체 목록을 볼 수 있다.
마지막 방법은 전체 데이터셋을 스크롤하여 볼 수 있도록 RStudio의 내장 데이터 뷰어를 사용하는 것이다. 긴 데이터 연쇄 작업의 마지막에도 이 방법은 유용하다.
nycflights13::flights %>%
view()
df <- tibble(
x = runif(5),
y = rnorm(5)
)
#이름으로추출
df$x
## [1] 0.7063033 0.8754381 0.4990366 0.9936386 0.3491632
df[["x"]]
## [1] 0.7063033 0.8754381 0.4990366 0.9936386 0.3491632
#위치로추출
df[[1]]
## [1] 0.7063033 0.8754381 0.4990366 0.9936386 0.3491632
df %>% .$x
## [1] 0.7063033 0.8754381 0.4990366 0.9936386 0.3491632
df %>% .[["x"]]
## [1] 0.7063033 0.8754381 0.4990366 0.9936386 0.3491632
class(as.data.frame(tb))
#> [1] “data.frame”
1.어떤 객체가 tibble 인지 알 수 있는 방법은 무엇인가? (힌트: 일반 데이터프레임인 mtcars 를 화면출력해보라.) 출력해기, class, is_tibble()
2.data.frame 과 이에 해당하는 tibble 에서 다음 연산들을 비교하고 차이를 밝혀보라. 차이점은 무엇인가? 데이터프레임의 기본 동작이 혼란스러운 점은 무엇인가?
df <- data.frame(abc = 1, xyz = "a")
df$x
## [1] "a"
df[, "xyz"]
## [1] "a"
df[, c("abc", "xyz")]
## abc xyz
## 1 1 a
3.객체에 변수 이름을 저장하고 있는 경우 (예: var <- “mpg” ), tibble 에서 이 참조 변수를 어떻게 추출할 수 있는가?
4.다음의 데이터프레임에서 비구문론적 이름을 참조하는 방법을 연습해보라.
enframe(1:3)
## # A tibble: 3 x 2
## name value
## <int> <int>
## 1 1 1
## 2 2 2
## 3 3 3
1 vs 2 의 산점도를 플롯팅 하기.
열 2 를 열 1 로 나누어, 3 이라는 새로운 열을 생성하기.
열의 이름을 one, two, three 로 변경하기
enframe(list(one = 1, two = 2:3, three = 4:6))
## # A tibble: 3 x 2
## name value
## <chr> <list>
## 1 one <dbl [1]>
## 2 two <int [2]>
## 3 three <int [3]>
annoying <- tibble(
`1` = 1:10,
`2` = `1` * 2 + rnorm(length('1'))
)
5.tibble::enframe() 은 어떤 동작을 하는가? 언제 사용하겠는가? 변수추출
6.tibble 의 바닥글(footer)에 화면출력되는 열 이름의 개수를 제어하는 옵션은 무엇인가? print