R数据科学chapter7

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。

你可能感兴趣的:(R数据科学chapter7)