library(tidyverse)
#多数其他 R 包使用的是标准数据框
#使用 as_tibble() 函数来完成将数据框转换为 tibble:
as_tibble(iris)
#可以通过 tibble() 函数使用一个向量来创建新 tibble。
#tibble() 会自动重复长度为 1 的输入,并可以使用刚刚创建的新变量
tibble(
x = 1:5,
y = 1,
z=x^2+ y )
#如果你已经非常熟悉 data.frame() 函数,
#那么请注意 tibble() 函数的功能要少得多:
#它不能改变输入的类型(例如,不能将字符串转换为因子)、变量的名称,也不能创建行名称。
#可以在 tibble 中使用在 R 中无效的变量名称(即不符合语法的名称)作为列名称。
#例如, 列名称可以不以字母开头,也可以包含特殊字符(如空格)。
#要想引用这样的变量,需要 使用反引号 ` 将它们括起来:
tb <- tibble(
`:)` = "smile",
` ` = "space",
`2000` = "number"
)
tb
#如果要在 ggplot2 和 dplyr 等其他 R 包中使用这些变量,也需要使用反引号。
#创建 tibble 的另一种方法是使用 tribble() 函数,
#tribble 是 transposed tibble(转置 tibble) 的缩写。
#tribble() 是定制化的,可以对数据按行进行编码:
#列标题由公式(以 ~ 开头) 定义,数据条目以逗号分隔,这样就可以用易读的方式对少量数据进行布局:
#我通常会加一条注释(以 # 开头的行)来明确指出标题行的位置。
tribble(
~x, ~y, ~z,
#--|--|----
"a", 2, 3.6,
"b", 1, 8.5
)
#对比tibble与data.frame
#tibble 和传统 data.frame 的使用方法主要有两处不同:打印和取子集。
#打印
#tibble 的打印方法进行了优化,只显示前 10 行结果,
#并且列也是适合屏幕的,这种方式非常适合大数据集。
#除了打印列名,tibble 还会打印出列的类型,这项非常棒的功能借鉴于 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)
)
#有时需要比默认显 示更多的输出,这时就要设置几个选项。
#可以明确使用 print() 函数来打印数据框,并控制打印的行数(n)和显示的宽度 (width)。
#width = Inf 可以显示出所有列
nycflights13::flights %>%
print(n = 10, width = Inf)
#还可以通过设置以下选项来控制默认的打印方式。
#• options(tibble.print_max = n, tibble.pring_min = m):如果多于 m 行,则只打印出 n 行。
# options(tibble.print_min = Inf) 表示总是打印所有行。
#• options(tibble.width = Inf) 表示总是打印所有列,不考虑屏幕的宽度。
#最后一种方式是使用 RStudio 内置的数据查看器,以滚动方式查看整个数据集。
nycflights13::flights %>%
View()
#取子集
#如果想要提取单个变量,那么就需 要一些新工具,如 $ 和 [[。
#[[ 可以按名称或位置提取变量;
#$ 只能按名称提取变量,但可以减少一些输入:
#runif()函数用于生成从0到1区间范围内的服从正态分布的随机数
#rnorm()函数产生一系列服从正态分布的随机数,随机数个数,均值和标准差都可以设定。
df <- tibble(
x = runif(5),
y = rnorm(5)
)
# 按名称提取
df$x
df[["x"]]
# 按位置提取
df[[1]]
#在管道中使用这些提取操作,需要使用特殊的占位符 .
df %>% .$x
df %>% .[["x"]]
#与 data.frame 相比,tibble 更严格:
#它不能进行部分匹配,如果想要访问的列不存在,它会生成一条警告信息。
#与旧代码进行交互
#有些比较旧的函数不支持 tibble。
#如果遇到这种函数,可以使用 as.data.frame() 函数将tibble 转换回 data.frame:
class(as.data.frame(tb))
#有些旧函数不支持 tibble 的主要原因在于 [ 的功能。
#对于 R 基础包中的数据框,[ 有时返回一个数据框, 有时返回一个向量。
#对于 tibble,[ 则总是返回另一个 tibble。