美文网首页
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