29.关于tibble和data.frame之二

2021-08-13  本文已影响0人  心惊梦醒

【上一篇:28.关于tibble和data.frame之一】
【下一篇:30.关于readr包里的read系列函数】

3. tibble()函数和data.frame()函数的不同之二

    1) 在print上的不同。传统的数据框,print之后展示所有的行和列,tibble的print只展示前十行,列会适应屏幕展示。

> nycflights13::flights %>% print()
# A tibble: 336,776 x 19
    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
 1  2013     1     1      517            515         2      830            819
 2  2013     1     1      533            529         4      850            830
 3  2013     1     1      542            540         2      923            850
 4  2013     1     1      544            545        -1     1004           1022
 5  2013     1     1      554            600        -6      812            837
 6  2013     1     1      554            558        -4      740            728
 7  2013     1     1      555            600        -5      913            854
 8  2013     1     1      557            600        -3      709            723
 9  2013     1     1      557            600        -3      838            846
10  2013     1     1      558            600        -2      753            745
# ... with 336,766 more rows, and 11 more variables: arr_delay <dbl>,
#   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
#   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>,
#   time_hour <dttm>

    可设置print的参数控制打印:

# 打印20行,列全部打印
nycflights13::flights %>% print(n = 20, width = Inf)

    对tibble,可以用options()函数进行全局打印设置(一经设置,永久有效):

#设置最小打印行数和最大打印行数,如果tibble有>n行,则只打印m行
options(tibble.print_max = n, tibble.print_min = m)
#设置打印所有行
options(tibble.print_min = Inf)
#打印所有的列
options(tibble.width = Inf)

    2) 取列的子集的两个新工具$[[。tibble取子集对变量名较严格。

$后直接跟变量名
[[数字或者变量名]]  #变量名要用双引号括起来
取子集的不同

    data.frame取一列不返回向量的方法:

> df<-data.frame(a=1:10,b=letters[1:10],c=runif(10))
> df[1]
    a
1   1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9
10 10
> df[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10
> df[,1]
 [1]  1  2  3  4  5  6  7  8  9 10
4. 其他小知识

    1) 假设将变量名存到一个对象中,如何用这个对象把变量的值从tibble中取出来。

> var<-'a'
> df<-tibble(a=1:10,b=letters[1:10],c=runif(10))
> df[[var]]
 [1]  1  2  3  4  5  6  7  8  9 10
> df[["a"]]
 [1]  1  2  3  4  5  6  7  8  9 10

    2) 一种特殊的占位符" . "可以在pip中使用:

df %>% .[[var]]
df %>% .$a

    3) tibble.enframe()函数可以将向量转成tibble,其他更多功能见帮助文档。

enframe(1:3)

    4) 解引用表达式

> x <- 3
> tibble(x = 1, y = x)
# A tibble: 1 x 2
      x     y
  <dbl> <dbl>
1     1     1
> tibble(x = 1, y = !!x)
# A tibble: 1 x 2
      x     y
  <dbl> <dbl>
1     1     3
4. 很重要的总结

    1. 对tibble中的列名(也就是变量名),能用non-syntactic name,其实就是用``将name括起来了,没啥大不了的。但要注意的是,使用的时候,不管是取子集、运算、绘图,都要用``括起来后才能正常使用。data.frame中跟列名有关的参数是:

stringsAsFactors:逻辑值,默认为FALSE,是否将字符串向量转成因子
check.names:逻辑值,默认TRUE,检查列名确认其符合syntactic,且是unique的。
> (df<-data.frame(1:10,letters[1:10],runif(10),check.names = T))
   X1.10 letters.1.10.  runif.10.
1      1             a 0.81224026
2      2             b 0.07225875
3      3             c 0.64121344
4      4             d 0.71966993
5      5             e 0.36557231
6      6             f 0.85513545
7      7             g 0.45942457
8      8             h 0.15722427
9      9             i 0.41453395
10    10             j 0.90570964
> (df<-data.frame(1:10,letters[1:10],runif(10),check.names = F,fix.empty.names = F))
                  
1   1 a 0.39641492
2   2 b 0.39382357
3   3 c 0.05149723
4   4 d 0.94000301
5   5 e 0.59156748
6   6 f 0.60415162
7   7 g 0.79627461
8   8 h 0.37756130
9   9 i 0.35011473
10 10 j 0.78170703

fix.empty.names:逻辑值,默认为TRUE,表示如果构建数据框的时候形式是value
(不是tag=value),就给个constructed name;如果是FLASE,就给空。此时check.names应该为FALSE
> (df<-data.frame(1:10,letters[1:10],runif(10),check.names = F))
   1:10 letters[1:10]   runif(10)
1     1             a 0.394257475
2     2             b 0.620495489
3     3             c 0.330593479
4     4             d 0.001414736
5     5             e 0.585622990
6     6             f 0.732553757
7     7             g 0.612864199
8     8             h 0.690226531
9     9             i 0.055589493
10   10             j 0.997872859

    2. 对行名,tibble的行名不可变,data.frame的可以用rawnames()函数设置。data.frame()函数中与行名有关的参数是:

row.names:默认为NULL,也就是不指定行名,指定的方法上一篇说过了
check.rows:逻辑值,默认为FALSE,检查行长度和名称的一致性  #此参数,费解

    3. 最重要的一点,看完每个函数的Usage,决定前面的理解并不正确。但,第一遍学习,常学常新!!!
    4.记住主要参数,细节需要的时候再深究。
    很高兴遇见这本书,打通了之前的很多关卡。学得很难,但会坚持。

    部分理解可能不对,欢迎指正!

【上一篇:28.关于tibble和data.frame之一】
【下一篇:30.关于readr包里的read系列函数】

上一篇下一篇

猜你喜欢

热点阅读