美文网首页
tibble实现简单数据框

tibble实现简单数据框

作者: 医科研 | 来源:发表于2019-01-25 10:05 被阅读6次
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"

相关文章

网友评论

      本文标题:tibble实现简单数据框

      本文链接:https://www.haomeiwen.com/subject/jtnyjqtx.html