【r<-数据整理】tibbles

作者: 王诗翔 | 来源:发表于2018-06-27 10:42 被阅读8次
library('tidyverse')

创建 tibbles

如果你想要将R的data.frame强制转换为tibble,可以使用 as_tibble():

as_tibble(iris)
#> # A tibble: 150 x 5
#>   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#>          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
#> 1          5.1         3.5          1.4         0.2 setosa 
#> 2          4.9         3            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           3.6          1.4         0.2 setosa 
#> 6          5.4         3.9          1.7         0.4 setosa 
#> # ... with 144 more rows

你也可以使用tibble()从单个的向量创建一个新的tibble(),它会自动进行循环对齐。

tibble(
  x = 1:5, 
  y = 1, 
  z = x ^ 2 + y
)
#> # A tibble: 5 x 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变量名,称为 non-syntactic。我们在使用时需要用到反引号```:

tb <- tibble(
  `:)` = "smile", 
  ` ` = "space",
  `2000` = "number"
)
tb
#> # A tibble: 1 x 3
#>   `:)`  ` `   `2000`
#>   <chr> <chr> <chr> 
#> 1 smile space number

另一种创建tibble的方式是使用tribble()tr是转换的缩写,该函数用于自定义代码中的数据输入,列名用公式定义,条目用逗号分隔。这让列出少量的数据并被容易读入变得可能。

tribble(
  ~x, ~y, ~z,
  #--|--|----
  "a", 2, 3.6,
  "b", 1, 8.5
)
#> # A tibble: 2 x 3
#>   x         y     z
#>   <chr> <dbl> <dbl>
#> 1 a         2   3.6
#> 2 b         1   8.5

我通常添加一个注释符号,让信息头变得更清楚。

10.3 Tibbles vs. data.frame

tibble vs. 经典的data.frame存在两处不同:打印和取子集。

10.3.1 打印

Tibbles默认只打印数据的前10行,而且所有的列都会适应屏幕,处理大数据时这将变得更加轻松。除了列名,每一列的数据类型也会打印。

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 x 5
#>   a                   b              c     d e    
#>   <dttm>              <date>     <int> <dbl> <chr>
#> 1 2018-06-21 05:08:33 2018-06-28     1 0.368 h    
#> 2 2018-06-21 23:13:43 2018-07-03     2 0.612 n    
#> 3 2018-06-21 17:37:22 2018-07-13     3 0.415 l    
#> 4 2018-06-21 06:58:39 2018-07-12     4 0.212 x    
#> 5 2018-06-21 03:22:56 2018-07-09     5 0.733 a    
#> 6 2018-06-21 14:23:53 2018-07-05     6 0.460 v    
#> # ... with 994 more rows

有时候你可能需要自定义打印行与列,有以下方式

你可以使用print()指定数据框,用n控制行,用width控制列:

nycflights13::flights %>% 
  print(n = 10, width = Inf)

你也可以设置选项以更改默认的打印行为:

  • options(tibble.print_max = n, tibble.print_min = m): 如果大于n行,仅打印m行。使用 options(tibble.print_min = Inf)总是显示所有行。
  • 使用 options(tibble.width = Inf) 总是输出所有列,不管屏幕宽度。

你可以使用 package?tibble查看所有的选项列表。

最后的选项是使用RStudio内置的数据查看器,然后滚动查看数据集内容,可以把它用在操作链的末尾:

nycflights13::flights %>% 
  View()

10.3.2 取子集

如果你想要取出特定列,我们使用 $ and [[[[根据名字或位置;$仅根据名字。

df <- tibble(
  x = runif(5),
  y = rnorm(5)
)

# Extract by name
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

# Extract by position
df[[1]]
#> [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 %>% .[["x"]]
#> [1] 0.434 0.395 0.548 0.762 0.254

相比于data.frame,tibbles更加严格:它从不执行部分匹配,并且在你想要获取不存在列时回抛出警告。

与旧代码交互

一些旧函数不能使用tibbles,这时候你可以使用as.data.frame()将tibble转换回数据框:

class(as.data.frame(tb))
#> [1] "data.frame"

from <R for data science>

相关文章

  • 【r<-数据整理】tibbles

    创建 tibbles 如果你想要将R的data.frame强制转换为tibble,可以使用 as_tibble()...

  • R for data Science(六)

    数据整理 这周我们进入该书第二部分,讲解数据的整理和清理数据 分为三个部分: Tibbles data impor...

  • 【tidyverse】part2:数据整理

    1. tibble数据 1.1 tibble数据简介 “Tibbles are data frames, but ...

  • 【r<-数据整理】数据导入

    开始 大多数readr包的函数都关注于将文本文件转换为数据框: read_csv() 读入逗号分隔文件,read_...

  • R 数据处理(七)

    前言 在前面的介绍中,我们使用到了 tibbles 这种数据结构。 这是 tidyverse 包定义的类似于 R ...

  • [R语言] tibble包《R for data science

    《R for Data Science》第九、十章 Tibbles 啃书知识点积累参考链接:R for Data ...

  • 整理数据

    2号晚上开始下载数据,一天整理一年的日照时数。加油(ง •̀_•́)ง

  • 数据整理

    1 tidyverse系统 https://www.math.pku.edu.cn/teachers/lidf/d...

  • 整理数据

    前面说了怎么找数据这一块。 两个方面的,如果从其他人那里拿的话,就不存在数据整理,直接拿来打电话就行了。 但是如果...

  • 整理数据

    本来手里就三五份数据,突然这个给了五份,那个给了三份,他个再给了五份……一下子累积了几十份。一堆的数据。 于是大工...

网友评论

    本文标题:【r<-数据整理】tibbles

    本文链接:https://www.haomeiwen.com/subject/dxhbyftx.html