R for Tibbles

1 Introduction

Tibbles เป็นกรอบข้อมูล แต่พวกเขาปรับพฤติกรรมบางอย่างที่เก่ากว่าเพื่อให้ชีวิตง่ายขึ้นเล็กน้อย R เป็นภาษาเก่าและบางสิ่งบางอย่างที่เป็นประโยชน์ 10 หรือ 20 ปีที่ผ่านมาได้รับในทางของคุณ เป็นการยากที่จะเปลี่ยนฐาน R โดยไม่ทำลายโค้ดที่มีอยู่ดังนั้นนวัตกรรมส่วนใหญ่เกิดขึ้นในแพ็คเกจ ที่นี่เราจะอธิบายแพคเกจ tibble ซึ่งให้กรอบข้อมูลความเห็นที่ทำให้การทำงานใน tidyverse ง่ายขึ้นเล็กน้อย ในหลาย ๆ ที่ฉันจะใช้คำว่า tibble และกรอบข้อมูลแทนกัน เมื่อฉันต้องการดึงดูดความสนใจเป็นพิเศษกับกรอบข้อมูล R ที่มีอยู่ภายในฉันจะเรียกว่า data.frames

 ข้อกำหนดเบื้องต้น

ในบทนี้เราจะสำรวจแพคเกจ tibble ซึ่งเป็นส่วนหนึ่งของแกน tidyverse
library(tidyverse)

2 การสร้าง tibbles


เกือบทั้งหมดของฟังก์ชั่นที่คุณจะใช้ในหนังสือเล่มนี้ผลิต tibbles เป็น tibbles เป็นหนึ่งในคุณสมบัติรวมของ tidyverse แพคเกจ R ส่วนใหญ่อื่น ๆ ใช้เฟรมข้อมูลปกติดังนั้นคุณอาจต้องการบังคับให้กรอบข้อมูลเป็นแบบ tibble คุณสามารถทำได้ด้วย as_tibble ():
as_tibble(iris)
#> # A tibble: 150 × 5
#>   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#>          <dbl>       <dbl>        <dbl>       <dbl>  <fctr>
#> 1          5.1         3.5          1.4         0.2  setosa
#> 2          4.9         3.0          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.0         3.6          1.4         0.2  setosa
#> 6          5.4         3.9          1.7         0.4  setosa
#> # ... กับอีก 144 แถว
คุณสามารถสร้าง tibble ใหม่จากพาหะแต่ละตัวด้วย tibble () tibble () จะรีไซเคิลรีซอร์สที่มีความยาว 1 โดยอัตโนมัติและช่วยให้คุณสามารถอ้างถึงตัวแปรที่คุณเพิ่งสร้างขึ้นดังที่แสดงด้านล่าง
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 () ไม่มากนัก: ไม่เคยเปลี่ยนประเภทของอินพุท (เช่นไม่เคยแปลงสตริงให้เป็นปัจจัย) จะไม่มีการเปลี่ยนแปลงชื่อตัวแปรและ ไม่สร้างชื่อแถว

เป็นไปได้ที่ tibble จะมีชื่อคอลัมน์ที่ไม่ถูกต้องชื่อตัวแปร R, aka ชื่อที่ไม่ใช่ syntax. ตัวอย่างเช่นอาจไม่ได้ขึ้นต้นด้วยตัวอักษรหรืออาจมีอักขระที่ไม่ปกติเช่นเว้นวรรค เมื่อต้องการอ้างถึงตัวแปรเหล่านี้คุณต้องล้อมรอบด้วย backticks `:
tb <- tibble(
  `:)` = "smile", 
  ` ` = "space",
  `2000` = "number"
)
tb
#> # A tibble: 1 × 3
#>    `:)`   ` ` `2000`
#>   <chr> <chr>  <chr>
#> 1 หมายเลขพื้นที่รอยยิ้ม
คุณต้องมีแบ็คเก็ตเมื่อทำงานกับตัวแปรเหล่านี้ในแพ็กเกจอื่นเช่น ggplot2, dplyr และ tidyr

อีกวิธีหนึ่งในการสร้าง tibble คือ tribble (), สั้น ๆ สำหรับการเปลี่ยนทิเบิ้ล tribble () ถูกกำหนดค่าสำหรับการป้อนข้อมูลในโค้ด: ส่วนหัวของคอลัมน์ถูกกำหนดโดยสูตร (เช่นพวกเขาเริ่มต้นด้วย ~) และรายการจะคั่นด้วยเครื่องหมายจุลภาค ทำให้สามารถจัดวางข้อมูลจำนวนน้อยในแบบอ่านง่าย
tribble(
  ~x, ~y, ~z,
  #--|--|----
  "a", 2, 3.6,
  "b", 1, 8.5
)
#> # A tibble: 2 × 3
#>       x     y     z
#>   <chr> <dbl> <dbl>
#> 1     a     2   3.6
#> 2     b     1   8.5

3 Tibbles vs. data.frame

มีความแตกต่างสองประการในการใช้งาน tibble กับข้อมูลแบบ data.frame printing เเละ subsetting.

3.1 Printing

Tibbles มีวิธีการพิมพ์แบบละเอียดที่แสดงเฉพาะ 10 แถวแรกและคอลัมน์ทั้งหมดที่พอดีกับหน้าจอ ทำให้การทำงานกับข้อมูลขนาดใหญ่ทำได้ง่ายขึ้น นอกเหนือจากชื่อคอลัมน์แต่ละคอลัมน์รายงานประเภทของคุณลักษณะที่ดียืมจาก str ():
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 2017-05-04 14:08:35 2017-05-11     1 0.368     h
#> 2 2017-05-05 08:13:45 2017-05-16     2 0.612     n
#> 3 2017-05-05 02:37:24 2017-05-26     3 0.415     l
#> 4 2017-05-04 15:58:41 2017-05-25     4 0.212     x
#> 5 2017-05-04 12:22:58 2017-05-22     5 0.733     a
#> 6 2017-05-04 23:23:55 2017-05-18     6 0.460     v
#> # ... with 994 more rows

Tibbles ได้รับการออกแบบมาเพื่อไม่ให้คุณครอบงำคอนโซลของคุณโดยบังเอิญเมื่อคุณพิมพ์เฟรมข้อมูลขนาดใหญ่ แต่บางครั้งคุณต้องมีผลลัพธ์มากกว่าการแสดงผลเริ่มต้น มีตัวเลือกหลายอย่างที่สามารถช่วยได้

ขั้นแรกคุณสามารถพิมพ์ได้อย่างชัดเจน () กรอบข้อมูลและควบคุมจำนวนแถว (n) และความกว้างของจอแสดงผล width = Inf จะแสดงคอลัมน์ทั้งหมด:
nycflights13::flights %>% 
  print(n = 10, width = Inf)
คุณยังสามารถควบคุมพฤติกรรมการพิมพ์เริ่มต้นด้วยการตั้งค่าตัวเลือก:
  • ตัวเลือก (tibble.print_max = n, tibble.print_min = m): ถ้ามีมากกว่า m แถวให้พิมพ์เฉพาะ n แถวเท่านั้น ใช้ตัวเลือก (dplyr.print_min = Inf) เพื่อแสดงแถวทั้งหมดเสมอ

  • ใช้ตัวเลือก (tibble.width = Inf) เพื่อพิมพ์คอลัมน์ทั้งหมดโดยไม่คำนึงถึงความกว้างของหน้าจอ

คุณสามารถดูรายการตัวเลือกทั้งหมดโดยดูจากแพคเกจช่วยเหลือเกี่ยวกับแพคเกจ? tibble

ตัวเลือกสุดท้ายคือการใช้โปรแกรมดูข้อมูลในตัวของ RStudio เพื่อให้ได้มุมมองแบบเลื่อนของชุดข้อมูลที่สมบูรณ์ นอกจากนี้ยังเป็นประโยชน์ในตอนท้ายของโซ่ยาวของ manipulations

3.2 Subsetting

จนถึงขณะนี้เครื่องมือทั้งหมดที่คุณได้เรียนรู้ได้ทำงานร่วมกับเฟรมข้อมูลที่สมบูรณ์ ถ้าคุณต้องการดึงตัวแปรเดี่ยวคุณต้องมีเครื่องมือใหม่ $ และ [[. [[สามารถแยกตามชื่อหรือตำแหน่ง; $ สารสกัดเฉพาะตามชื่อ แต่พิมพ์น้อยลง
df <- tibble(
  x = runif(5),
  y = rnorm(5)
)

# แยกตามชื่อ
df$x
#> [1] 0.434 0.395 0.548 0.762 0.254
df[["x"]]
#> [1] 0.434 0.395 0.548 0.762 0.254

# แยกตามตำแหน่ง
df[[1]]
#> [1] 0.434 0.395 0.548 0.762 0.254
เมื่อเทียบกับ data.frame แล้ว tibbles จะเข้มงวดมากขึ้น: ไม่เคยจับคู่บางส่วนและจะสร้างคำเตือนหากไม่มีคอลัมน์ที่คุณต้องการเข้าถึง

4 Interacting with older code


บางฟังก์ชันที่เก่ากว่าไม่สามารถทำงานร่วมกับ tibbles ได้ หากคุณพบกับฟังก์ชันเหล่านี้ให้ใช้ as.data.frame () เพื่อเปิดไฟล์ tibble กลับไปยัง data.frame:

class(as.data.frame(tb))
#> [1] "data.frame"
สาเหตุหลักที่ฟังก์ชั่นที่เก่ากว่าบางตัวไม่ทำงานร่วมกับ tibble คือ [function เราไม่ได้ใช้ [มากในหนังสือเล่มนี้เพราะ dplyr :: filter () และ dplyr :: select () ช่วยให้คุณสามารถแก้ปัญหาเดียวกันด้วยรหัสที่ชัดเจน (แต่คุณจะได้เรียนรู้เล็กน้อยเกี่ยวกับเรื่องนี้ในการเวียนย่อยเวกเตอร์) ด้วยเฟรมข้อมูล r ฐาน [บางครั้งจะส่งกลับเฟรมข้อมูลและบางครั้งจะส่งกลับเวกเตอร์ ด้วย tibbles [เสมอส่งกลับ tibble อื่น


referable http://r4ds.had.co.nz/tibbles.html

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

R STUDIO

R for Pipes

R for Data import