DS Study/R4DS(R언어)

[R4DS] [4] tibble로 하는 티블

23학번이수현 2024. 4. 4. 19:59

1. Introduce

- R4DS라는 책에서는 전통적인 data.frame(데이터프레임) 대신 '티블(tibble)'을 가지고 작업한다.

- tibble도 사실 데이터프레임이지만, 좀 더 편리하게 사용할 수 있도록 오래된 동작들을 수정한 것이다.

- 티블과 데이터프레임을 같은 의미로 사용하지만 

-R의 내장 데이터프레임에 대해 이야기 할 때는 data.frame으로 호칭할 것이다.

 

librart(tidyverse)

 

- tidyverse 패키지를 통해 tibble 패키지를 실행시킬수있다.

 

2.  tibble 생성하기

- R4DS에서 사용하는 대부분의 함수는 tidyverse의 통합 특성 중 하나인 티블을 생성한다.

- 대부분의 다른 R패키지는 일반적인 데이터프레임을 사용하므로,

- 데이터프레임을 티블로 강제 변형해야 할 경우가 있다. 

- as_tibble()을 사용하면 해결할 수 있다. 

as_tibble(iris)
# A tibble: 150 × 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 
# ℹ 140 more rows
# ℹ Use `print(n = ...)` to see more rows

 

- tibble()을 사용하여 개별 벡터로부터 새로운 티블을 만들 수 있다. 

tibble(
    x= 1:5,
    y = 1,
    z = x^2+ y
)
# A tibble: 5 × 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

 

- data.frame()에 이미 익숙하다면 tibble()은 동작의 규모가 훨씬 작다는 것에 주의해야 한다.

- 즉 입력의 유형을 절대로 변경하지 않고, 변수의 이름을 바꾸거나 행 이름을 생성하지 않는다.

- 티블은 R변수명으로 유효하지 않은 이름도 열 이름으로 가질 수 있다. 

- 해당 변수들을 참조하려면 역따옴표(backtickt`)으로 감싸야한다.

 

 tb <- tibble(
     `:)` = "스마일",
     ` ` = "스페이스" )
# A tibble: 1 × 2
  `:)`   ` `     
  <chr>  <chr>   
1 스마일 스페이스

 

- 티블을 만드는 또 다른 방법은 tribble()을 사용하는 것이다.

- tribble()은 코드로 데이터를 입력하기 위해 고안되었다. 

- 열 헤더는 공식으로 정의되고(~시작) 입력은 쉼표로 구분된다.

- ex)

tribble(
    ~x,~y,~z,
    "a",1,2,
    "b",2,3
)
# A tibble: 2 × 3
  x         y     z
  <chr> <dbl> <dbl>
1 a         1     2
2 b         2     3

 

3. Tibble vs Dataframe

- 티블과 데이터프레임의 용법에 두 가지 주요 차이점이 있다. 화면 출력과 서브셋하기이다.

 

3.1 화면 출력

- 티블에는 처음 10개의 행과 화면에 들어가는 열 모두를 보여주는 정교한 화면 출력 방법이 있다. 

- 이를 이용하면 대용량 데이터 작업을 훨씬 쉽게 할 수 있다.

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 × 5
   a                   b              c      d e    
   <dttm>              <date>     <int>  <dbl> <chr>
 1 2024-04-04 19:52:57 2024-04-26     1 0.296  r    
 2 2024-04-05 14:52:12 2024-04-24     2 0.371  r    
 3 2024-04-05 19:14:46 2024-04-11     3 0.961  m    
 4 2024-04-05 14:15:09 2024-04-17     4 0.813  l    
 5 2024-04-05 11:51:09 2024-05-01     5 0.0582 n    
 6 2024-04-04 21:15:16 2024-04-13     6 0.212  o    
 7 2024-04-04 23:07:16 2024-04-23     7 0.609  m    
 8 2024-04-05 12:07:12 2024-04-30     8 0.934  p    
 9 2024-04-04 22:37:23 2024-04-09     9 0.962  d    
10 2024-04-05 16:15:36 2024-05-02    10 0.319  j    
# ℹ 990 more rows
# ℹ Use `print(n = ...)` to see more rows

3.2 서브셋하기

- 변수 하나를 추출하려면 새로운 도구인 $ 및[[ 이 필요하다

- [[ : 이름이나 위치로 추출가능

- $ : 이름으로만 추출 가능 --> 타이핑을 조금 덜해도됨

df <- tibble(
    x = runif(5),
    y = rnorm(5)
)

1) 이름으로만 추출

df$x
[1] 0.1302393 0.8210115 0.9730745 0.7630760 0.7470293

df[["x"]]
[1] 0.1302393 0.8210115 0.9730745 0.7630760 0.7470293

2) 위치로 추출

df[[1]]
[1] 0.1302393 0.8210115 0.9730745 0.7630760 0.7470293

 

- 파이프에서 이것들을 사용하려면 특별한 플레이스홀더(placeholder)인 .을 사용해야한다.

ex)

df %>% .$x
[1] 0.1302393 0.8210115 0.9730745 0.7630760 0.7470293