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 a
df <- 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
。