Chapter7-R data science-tibble
Chard Liu
2019年1月24日
使用tibble实现简单数据框
tibble包
library(tidyverse)
## -- Attaching packages -------------------------------------------------- tidyverse 1.2.1 --
## √ ggplot2 3.1.0 √ purrr 0.2.5
## √ tibble 1.4.2 √ dplyr 0.7.8
## √ tidyr 0.8.2 √ stringr 1.3.1
## √ readr 1.3.1 √ forcats 0.3.0
## -- Conflicts ----------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
# 将标准数据框转换为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
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## # ... with 140 more rows
# tibble()函数使用向量创建tibble
tibble(x=1:5,y=2,z=x+y)#自动重复长度为2的输入
## # A tibble: 5 x 3
## x y z
## <int> <dbl> <dbl>
## 1 1 2 3
## 2 2 2 4
## 3 3 2 5
## 4 4 2 6
## 5 5 2 7
# tibble的功能较dataframe少,不能改变输入,变量名称,不能创建行名称
# 如果一定要,就使用R中的无效变量作为列名,要英语这种变量,需要 反引号括起来 ``
# 如果要在ggplot2,dplyr中使用这些变量,同样使用反引号括起这些变量
tb <- tibble(
`:)` = "smile",
` ` = "space",
`2000` = "number"
)
tb
## # A tibble: 1 x 3
## `:)` ` ` `2000`
## <chr> <chr> <chr>
## 1 smile space number
# 创建tibble的另一种方式是使用,tribble函数定制化,以~开头,对数据按行编码
tribble(
~x,~y,~z,
#--/--/----
"a", 2, 3.6,
"b", 1, 8.6
)
## # A tibble: 2 x 3
## x y z
## <chr> <dbl> <dbl>
## 1 a 2 3.6
## 2 b 1 8.6
# tibble对打印的优化,仅显示前10行结果,并且适合屏幕
tibble(
a = lubridate::now() + runif(1e3) * 86400,
b = lubridate::today() + runif(1e3) * 30,
c = 1:1e3,
d = runif(1e3),#随机产生1000个0-1间的正态分布
e = sample(letters, 1e3, replace = TRUE)
)
## # A tibble: 1,000 x 5
## a b c d e
## <dttm> <date> <int> <dbl> <chr>
## 1 2019-01-25 08:43:43 2019-02-01 1 0.499 y
## 2 2019-01-24 14:51:15 2019-02-19 2 0.992 q
## 3 2019-01-25 13:31:02 2019-02-22 3 0.189 v
## 4 2019-01-24 21:40:45 2019-02-02 4 0.700 b
## 5 2019-01-25 06:34:36 2019-02-07 5 0.707 c
## 6 2019-01-25 05:30:22 2019-02-04 6 0.885 t
## 7 2019-01-24 23:00:08 2019-02-13 7 0.321 e
## 8 2019-01-25 10:43:16 2019-02-03 8 0.713 n
## 9 2019-01-25 11:16:32 2019-02-15 9 0.154 j
## 10 2019-01-25 14:03:22 2019-02-10 10 0.895 q
## # ... with 990 more rows
# print函数控制打印行数(n),显示宽度,Inf打印所有列
nycflights13::flights %>%
print(n = 10, width = Inf)
## # A tibble: 336,776 x 19
## year month day dep_time sched_dep_time dep_delay arr_time
## <int> <int> <int> <int> <int> <dbl> <int>
## 1 2013 1 1 517 515 2 830
## 2 2013 1 1 533 529 4 850
## 3 2013 1 1 542 540 2 923
## 4 2013 1 1 544 545 -1 1004
## 5 2013 1 1 554 600 -6 812
## 6 2013 1 1 554 558 -4 740
## 7 2013 1 1 555 600 -5 913
## 8 2013 1 1 557 600 -3 709
## 9 2013 1 1 557 600 -3 838
## 10 2013 1 1 558 600 -2 753
## sched_arr_time arr_delay carrier flight tailnum origin dest air_time
## <int> <dbl> <chr> <int> <chr> <chr> <chr> <dbl>
## 1 819 11 UA 1545 N14228 EWR IAH 227
## 2 830 20 UA 1714 N24211 LGA IAH 227
## 3 850 33 AA 1141 N619AA JFK MIA 160
## 4 1022 -18 B6 725 N804JB JFK BQN 183
## 5 837 -25 DL 461 N668DN LGA ATL 116
## 6 728 12 UA 1696 N39463 EWR ORD 150
## 7 854 19 B6 507 N516JB EWR FLL 158
## 8 723 -14 EV 5708 N829AS LGA IAD 53
## 9 846 -8 B6 79 N593JB JFK MCO 140
## 10 745 8 AA 301 N3ALAA LGA ORD 138
## distance hour minute time_hour
## <dbl> <dbl> <dbl> <dttm>
## 1 1400 5 15 2013-01-01 05:00:00
## 2 1416 5 29 2013-01-01 05:00:00
## 3 1089 5 40 2013-01-01 05:00:00
## 4 1576 5 45 2013-01-01 05:00:00
## 5 762 6 0 2013-01-01 06:00:00
## 6 719 5 58 2013-01-01 05:00:00
## 7 1065 6 0 2013-01-01 06:00:00
## 8 229 6 0 2013-01-01 06:00:00
## 9 944 6 0 2013-01-01 06:00:00
## 10 733 6 0 2013-01-01 06:00:00
## # ... with 3.368e+05 more rows
#查看数据集
nycflights13::flights %>%
View()
#取子集 $ [[]]
df <- tibble(
x = runif(5),
y = rnorm(5)
)
df
## # A tibble: 5 x 2
## x y
## <dbl> <dbl>
## 1 0.237 1.02
## 2 0.232 -0.547
## 3 0.780 -0.492
## 4 0.714 -0.755
## 5 0.225 -1.44
# 提取子集
df$x
## [1] 0.2366755 0.2319595 0.7795914 0.7138559 0.2246254
df[["x"]]
## [1] 0.2366755 0.2319595 0.7795914 0.7138559 0.2246254
df[[1]]#按位置提取
## [1] 0.2366755 0.2319595 0.7795914 0.7138559 0.2246254
df %>% .$x #在管道中提取,使用特殊占位符.(一点)
## [1] 0.2366755 0.2319595 0.7795914 0.7138559 0.2246254
# 有些较旧的函数不支持,tibble,可将其转回dataframe
class(as.data.frame(tb))
## [1] "data.frame"
网友评论