R for Data Science总结之——tibble
程序员文章站
2022-03-01 15:43:32
...
R中传统的data.frame是很老的数据结构,而在新的tidyverse框架中提出了新的tibble来替代一些老的行为模式:
library(tidyverse)
将老式数据框转换成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(
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()更加懒惰,不会将string类型的数据转换成factor:
tb <- tibble(
`:)` = "smile",
` ` = "space",
`2000` = "number"
)
tb
#> # A tibble: 1 x 3
#> `:)` ` ` `2000`
#> <chr> <chr> <chr>
#> 1 smile space number
另外也可以用tribble()创建tibble, t表示的是transposed转置:
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
tibble vs data.frame
tibble只显示数据集的前十行:
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-08-24 18:13:19 2018-08-31 1 0.368 h
#> 2 2018-08-25 12:18:28 2018-09-05 2 0.612 n
#> 3 2018-08-25 06:42:07 2018-09-15 3 0.415 l
#> 4 2018-08-24 20:03:25 2018-09-14 4 0.212 x
#> 5 2018-08-24 16:27:41 2018-09-11 5 0.733 a
#> 6 2018-08-25 03:28:38 2018-09-07 6 0.460 v
#> # ... with 994 more rows
如果想调整这个特性可以设置:
nycflights13::flights %>%
print(n = 10, width = Inf)
options(tibble.print_max = n, tibble.print_min = m)
options(tibble.print_min = Inf)
options(tibble.width = Inf)
nycflights13::flights %>%
View()
子集
tibble挑选子集有$和[[两种方式:
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
若想在pipes中使用可以用.占位符:
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的包,需要将tibble转换成data.frame:
class(as.data.frame(tb))
#> [1] "data.frame"
本文代码已上传GITHUB点此进入
推荐阅读
-
Oracle 11g R2 Backup Data Pump(数据泵)之expdp/impdp工具
-
微信小程序中data-key属性之数据传输(经验总结)
-
Sqlserver2008R2配置数据库镜像之我的经验总结
-
Oracle 11g R2 Backup Data Pump(数据泵)之expdp/impdp工具
-
微信小程序中data-key属性之数据传输(经验总结)
-
『Data Science』R语言学习笔记,基础语法
-
『Data Science』R语言学习笔记,观察数据
-
R Data Science -1持续更新学习记录
-
『Data Science』R语言学习笔记,使用Swirl包学习R
-
R语言data manipulation学习笔记之subset data