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
referable http://r4ds.had.co.nz/tibbles.html
ความคิดเห็น
แสดงความคิดเห็น