tibble是升级版的data.frame,它保留了data.famre的优势,并且以更友好的方式展示出来

构建tibble

  • readr已知读入数据形成tibble
  • tibble()直接构建
  • tribble()直观构建
  • as_tibble()转换格式
  1. df2 <- read_csv(readr_example("challenge.csv"), guess_max = 1001)
  2. #> Parsed with column specification:
  3. #> cols(
  4. #> x = col_double(),
  5. #> y = col_date(format = "")
  6. #> )
  7. tibble(x = 1:3, y = list(1:5, 1:10, 1:20))
  8. #> # A tibble: 3 x 2
  9. #> x y
  10. #> <int> <list>
  11. #> 1 1 <int [5]>
  12. #> 2 2 <int [10]>
  13. #> 3 3 <int [20]>
  14. tribble(
  15. ~x, ~y,
  16. "a", 1:3,
  17. "b", 4:6
  18. )
  19. #> A tibble: 2 x 2
  20. #> x y
  21. #> <chr> <list>
  22. #> 1 a <int [3]>
  23. #> 2 b <int [3]>
  24. l <- list(x = 1:500, y = runif(500), z = 500:1)
  25. df <- as_tibble(l)
  26. #> A tibble: 500 x 3
  27. #> x y z
  28. #> <int> <dbl> <int>
  29. #> 1 1 0.311 500
  30. #> 2 2 0.512 499
  31. #> 3 3 0.440 498
  32. #> 4 4 0.501 497
  33. #> 5 5 0.131 496
  34. #> 6 6 0.566 495
  35. #> 7 7 0.647 494
  36. #> 8 8 0.200 493
  37. #> 9 9 0.121 492
  38. #> 10 10 0.315 491
  39. #> # ... with 490 more rows

tibble和data.frame的区别

print结果

tibble默认只展示前10行的信息

  1. tibble(x = -5:1000)
  2. #> # A tibble: 1,006 x 1
  3. #> x
  4. #> <int>
  5. #> 1 -5
  6. #> 2 -4
  7. #> 3 -3
  8. #> 4 -2
  9. #> 5 -1
  10. #> 6 0
  11. #> 7 1
  12. #> 8 2
  13. #> 9 3
  14. #> 10 4
  15. #> # … with 996 more rows

可以使用options(tibble.print_max = n, tibble.print_min = m)参数设置展示的信息

子集提取

tibble通过[提取子集返回的是一个tibble,如果提取某一列需要使用[[或者$

  1. df2 <- tibble(x = 1:3, y = 3:1)
  2. class(df2)
  3. #> [1] "tbl_df" "tbl" "data.frame"
  4. class(df2[, 1])
  5. #> [1] "tbl_df" "tbl" "data.frame"
  6. class(df2[[1]])
  7. #> [1] "integer"
  8. class(df2$x)
  9. #> [1] "integer"

自动填充

在构建tibble时,只有长度为1的值才会被循环填充

  1. tibble(a = 1:3, b = 1)
  2. #> # A tibble: 3 x 2
  3. #> a b
  4. #> <int> <dbl>
  5. #> 1 1 1
  6. #> 2 2 1
  7. #> 3 3 1
  8. tibble(a = 1:3, c = 1:2)
  9. #> Error: Tibble columns must have consistent lengths, only values of length one are recycled:
  10. #> * Length 2: Column `c`
  11. #> * Length 3: Column `a`

没有行名

tibble对象中是没有行名的,因此需要一些函数进行辅助操作

  • has_rownames(.data):判断数据是否有行名
  • remove_rownames(.data):去掉数据行名
  • rownames_to_column(.data, var = "rowname"):行名转为数据的第一列,var是行名所在列的名字
  • rowid_to_column(.data, var = "rowid"):行ID号转为数据的第一列,var是行名所在列的名字
  • column_to_rownames(.data, var = "rowname"):列转行名

常用操作

  • add_columnadd_row
    添加行和列

    1. add_column(df, z = -1:1, w = 0)
    2. #> # A tibble: 3 x 4
    3. #> x y z w
    4. #> <int> <int> <int> <dbl>
    5. #> 1 1 3 -1 0
    6. #> 2 2 2 0 0
    7. #> 3 3 1 1 0
  • enframedeframe
    把向量变成tibble和把tibble变成向量

    1. enframe(c(a = 5, b = 7), name = "name", value = "value")
    2. #> # A tibble: 2 x 2
    3. #> name value
    4. #> <chr> <dbl>
    5. #> 1 a 5
    6. #> 2 b 7
    7. deframe(tibble(a = 1:3))
    8. #> [1] 1 2 3
  • glimpse()
    相当于tibblestr()下·

    1. glimpse(df)
    2. #> Observations: 3
    3. #> Variables: 2
    4. #> $ x <int> 1, 2, 3
    5. #> $ y <int> 3, 2, 1
  • tbl_sum
    提供简要数据信息

    1. tbl_sum(df)
    2. #> A tibble
    3. #> "3 x 2"