library(tidyverse)
#多數(shù)其他 R 包使用的是標(biāo)準(zhǔn)數(shù)據(jù)框
#使用 as_tibble() 函數(shù)來(lái)完成將數(shù)據(jù)框轉(zhuǎn)換為 tibble:
as_tibble(iris)
#可以通過(guò) tibble() 函數(shù)使用一個(gè)向量來(lái)創(chuàng)建新 tibble锈颗。
#tibble() 會(huì)自動(dòng)重復(fù)長(zhǎng)度為 1 的輸入击吱,并可以使用剛剛創(chuàng)建的新變量
tibble(
? x = 1:5,
? y = 1,
? z=x^2+ y )
#如果你已經(jīng)非常熟悉 data.frame() 函數(shù)覆醇,
#那么請(qǐng)注意 tibble() 函數(shù)的功能要少得多:
#它不能改變輸入的類型(例如,不能將字符串轉(zhuǎn)換為因子)袍辞、變量的名稱搅吁,也不能創(chuàng)建行名稱谎懦。
#可以在 tibble 中使用在 R 中無(wú)效的變量名稱(即不符合語(yǔ)法的名稱)作為列名稱。
#例如梗劫, 列名稱可以不以字母開(kāi)頭枪萄,也可以包含特殊字符(如空格)猫妙。
#要想引用這樣的變量,需要 使用反引號(hào) ` 將它們括起來(lái):
tb <- tibble(
? `:)` = "smile",
? ` ` = "space",
? `2000` = "number"
)
tb
#如果要在 ggplot2 和 dplyr 等其他 R 包中使用這些變量割坠,也需要使用反引號(hào)齐帚。
#創(chuàng)建 tibble 的另一種方法是使用 tribble() 函數(shù),
#tribble 是 transposed tibble(轉(zhuǎn)置 tibble) 的縮寫(xiě)彼哼。
#tribble() 是定制化的对妄,可以對(duì)數(shù)據(jù)按行進(jìn)行編碼:
#列標(biāo)題由公式(以 ~ 開(kāi)頭) 定義,數(shù)據(jù)條目以逗號(hào)分隔敢朱,這樣就可以用易讀的方式對(duì)少量數(shù)據(jù)進(jìn)行布局:
#我通常會(huì)加一條注釋(以 # 開(kāi)頭的行)來(lái)明確指出標(biāo)題行的位置剪菱。
tribble(
? ~x, ~y, ~z,
? #--|--|----
? "a", 2, 3.6,
? "b", 1, 8.5
)
#對(duì)比tibble與data.frame
#tibble 和傳統(tǒng) data.frame 的使用方法主要有兩處不同:打印和取子集。
#打印
#tibble 的打印方法進(jìn)行了優(yōu)化,只顯示前 10 行結(jié)果,
#并且列也是適合屏幕的状共,這種方式非常適合大數(shù)據(jù)集。
#除了打印列名构灸,tibble 還會(huì)打印出列的類型,這項(xiàng)非常棒的功能借鑒于 str() 函數(shù)岸梨。
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)
)
#有時(shí)需要比默認(rèn)顯 示更多的輸出,這時(shí)就要設(shè)置幾個(gè)選項(xiàng)隔披。
#可以明確使用 print() 函數(shù)來(lái)打印數(shù)據(jù)框漓库,并控制打印的行數(shù)(n)和顯示的寬度 (width)。
#width = Inf 可以顯示出所有列
nycflights13::flights %>%
? print(n = 10, width = Inf)
#還可以通過(guò)設(shè)置以下選項(xiàng)來(lái)控制默認(rèn)的打印方式。
#? options(tibble.print_max = n, tibble.pring_min = m):如果多于 m 行,則只打印出 n 行彼妻。
#? options(tibble.print_min = Inf) 表示總是打印所有行幽邓。
#? options(tibble.width = Inf) 表示總是打印所有列,不考慮屏幕的寬度。
#最后一種方式是使用 RStudio 內(nèi)置的數(shù)據(jù)查看器重斑,以滾動(dòng)方式查看整個(gè)數(shù)據(jù)集。
nycflights13::flights %>%
? View()
#取子集
#如果想要提取單個(gè)變量,那么就需 要一些新工具,如 $ 和 [[。
#[[ 可以按名稱或位置提取變量;
#$ 只能按名稱提取變量,但可以減少一些輸入:
#runif()函數(shù)用于生成從0到1區(qū)間范圍內(nèi)的服從正態(tài)分布的隨機(jī)數(shù)
#rnorm()函數(shù)產(chǎn)生一系列服從正態(tài)分布的隨機(jī)數(shù)倦踢,隨機(jī)數(shù)個(gè)數(shù)边涕,均值和標(biāo)準(zhǔn)差都可以設(shè)定。
df <- tibble(
? x = runif(5),
? y = rnorm(5)
)
# 按名稱提取
df$x
df[["x"]]
# 按位置提取
df[[1]]
#在管道中使用這些提取操作腮介,需要使用特殊的占位符 .
df %>% .$x
df %>% .[["x"]]
#與 data.frame 相比灭抑,tibble 更嚴(yán)格:
#它不能進(jìn)行部分匹配,如果想要訪問(wèn)的列不存在,它會(huì)生成一條警告信息访递。
#與舊代碼進(jìn)行交互
#有些比較舊的函數(shù)不支持 tibble响巢。
#如果遇到這種函數(shù)灾炭,可以使用 as.data.frame() 函數(shù)將tibble 轉(zhuǎn)換回 data.frame:
class(as.data.frame(tb))
#有些舊函數(shù)不支持 tibble 的主要原因在于 [ 的功能涛酗。
#對(duì)于 R 基礎(chǔ)包中的數(shù)據(jù)框只泼,[ 有時(shí)返回一個(gè)數(shù)據(jù)框弥咪, 有時(shí)返回一個(gè)向量扳躬。
#對(duì)于 tibble,[ 則總是返回另一個(gè) tibble。