搜索
查看: 705|回复: 0

[R] R for data science 第七章 使用tibble实现简单数据框

[复制链接]

39

主题

40

帖子

288

积分

中级会员

Rank: 3Rank: 3

积分
288
发表于 2018-11-9 08:46:19 | 显示全部楼层 |阅读模式



R for data science 第七章 使用tibble实现简单数据框7.1 简介
  • tibble 包,其所提供的简单数据框更易于在 tidyverse 中使用。多数情况下,我们会交替使用 tibble 和数据框这两个术语;如果想要特别强调 R 内置的传统数据框,我们会使用 data.frame 来表示
  • 学习有关 tibble 的更多知识,可以使用 vignette("tibble") 命令

7.2 创建tibble
  • tibble 是 tidyverse 的标准功能之一
  • 想要将数据框转换为 tibble。可以使用 as_tibble() 函数来完成转换
  • 可以通过 tibble() 函数使用一个向量来创建新 tibble。tibble() 会自动重复长度为 1 的输入,并可以使用刚刚创建的新变量
    tibble(
    +    x=1:5,
    +    y=1,
    +    z=x^2+y)
    file:///Users/huimei/Library/Application%20Support/typora-user-images/image-20181108235313005.png?lastModify=1541724344
  • 可以在 tibble 中使用在 R 中无效的变量名称(即不符合语法的名称)作为列名称。例如,列名称可以不以字母开头,也可以包含特殊字符(如空格)。要想引用这样的变量,需要使用反引号 ` 将它们括起来
    tb<-tibble(
          ``="smile",
          ` `="space",
          `2000`="number"
    )
    如果要在 ggplot2 和 dplyr 等其他 R 包中使用这些变量,也需要使用反引号。 **
  • 创建 tibble 的另一种方法是使用 tribble() 函数,tribble 是 transposed tibble(转置 tibble) 的缩写。tribble() 是定制化的,可以对数据按行进行编码:列标题由公式(以 ~ 开头) 定义,数据条目以逗号分隔,这样就可以用易读的方式对少量数据进行布局
    • 会加一条注释(以 # 开头的行)来明确指出标题行的位置


7.3 对比tibble与data.frame
  • tibble 和传统 data.frame 的使用方法主要有两处不同:打印和取子集

  • tibble 的打印方法进行了优化,只显示前 10 行结果,并且列也是适合屏幕的,非常适合大数据集。tibble 还会打印出列的类型
    width=Inf可以显示出所有列
    options(tibble.print_min=Inf) 表示总是打印所有行。
    options(tibble.width=Inf) 表示总是打印所有列,不考虑屏幕的宽度。
  • 使用 RStudio 内置的数据查看器,以滚动方式查看整个数据集。进行一长串数据处理操作后,经常会使用这种查看方式。

  • 取子集
    • 如果想要提取单个变量,那么就需要一些新工具,如 $ 和 [[。[[ 可以按名称或位置提取变量
      • $ 只能按名称提取变量,但可以减少一些输入
        按名称提取$x [["x"]]
        按位置提取[[]]
      • 要想在管道中使用这些提取操作,需要使用特殊的占位符 .




7.4 与旧代码进行交互
  • 有些比较旧的函数不支持 tibble。如果遇到这种函数,可以使用 as.data.frame() 函数将 tibble 转换回 data.frame
    • as.data.frame(tb)  #将tibble 转换回data.frame


  • 对于 R 基础包中的数据框,[ 有时返回一个数据框,有时返回一个向量。对于 tibble,[ 则总是返回另一个 tibble

  • class(as.data.frame(tb)) #查看转换后的类型





上一篇:慧美——R for data science 第五章
下一篇:1109 chapter16
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2019-8-22 22:33 , Processed in 0.042124 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.