7 Tibbles
7.2 创建tibble
7.2.1 导图

7.2.2 实践
首先,iris数据集是data.frame而不是tibble。
- 利用tidyverse函数得到tibble
实践失败了…利用tidyverse函数,传入数据框,处理之后仍然是数据框。
- 利用
as_tibble创建tibble
- 使用向量创建
x <- c(1,2,3)
y <- 1
z <- x+y
a <- tibble(x,y,z)
str(a)
#> tibble [3 x 3] (S3: tbl_df/tbl/data.frame)
#> $ x: num [1:3] 1 2 3
#> $ y: num [1:3] 1 1 1
#> $ z: num [1:3] 2 3 4- 使用
tribble创建
a <- tribble(
~x,~y,~z,
"a",1,1.1,
"b",2,0.5
)
str(a)
#> tibble [2 x 3] (S3: tbl_df/tbl/data.frame)
#> $ x: chr [1:2] "a" "b"
#> $ y: num [1:2] 1 2
#> $ z: num [1:2] 1.1 0.5这个的语法比较新鲜。
7.3 对比tibble与data.frame
打印print:tibble默认只显示前 10 行结果,并且列也是适合屏幕的,还会打印出列的类型。可以通过print的参数或者option修改默认设置。
取子集:tibble不能进行部分匹配,如果想要访问的列不存在,会生成一条警告信息。
7.4 与旧代码进行交互
使用as.data.frame()可以将tible转换为data.frame。
7.5 练习
(2)对比 data.frame和等价的tibble上进行的以下操作。有何区别?为什么默认的数据框操作会让人感到沮丧?
df <- data.frame(abc = 1, xyz = "a")
df$x
#> [1] a
#> Levels: a
df[, "xyz"]
#> [1] a
#> Levels: a
df[, c("abc", "xyz")]
#> abc xyz
#> 1 1 adf <- as_tibble(df)
df$x
#> Warning: Unknown or uninitialised column: `x`.
#> NULL
df[, "xyz"]
#> # A tibble: 1 x 1
#> xyz
#> <fct>
#> 1 a
df[, c("abc", "xyz")]
#> # A tibble: 1 x 2
#> abc xyz
#> <dbl> <fct>
#> 1 1 a区别:tibble不能进行部分匹配,而data.frame可以。并且,data.frame在取一列的时候返回的是向量而不是data.frame,当列名是一个变量时不好处理(你不知道返回的是向量还是data.frame),而tibble则会一致地返回tibble。