微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 as_tibble(mtcars,rownames = NA) 不显示行名称?文档说它应该

如何解决为什么 as_tibble(mtcars,rownames = NA) 不显示行名称?文档说它应该

mtcars 显然有行名称

> head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

as_tibble 的文档告诉我,如果我设置 rownames = NA,我将得到行为:NA: keep row names。我试过这个:

> as_tibble(mtcars,rownames = NA)
# A tibble: 32 x 11
     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
 * <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
 2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
 3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
 4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
 5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
 6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
 7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
 8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2
 9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
# … with 22 more rows

显然,行名无处可见。认行为,即 as_tibble(mtcars,rownames = NULL)(相当于 as_tibble(mtcars))产生相同的输出,但去除1 上方和 <dbl> 左侧的星号。

如果我改为对 rownamesas_tibble(mtcars,rownames = "String here") 使用第三个也是最后一个选项,我终于可以保留行名称

> as_tibble(mtcars,rownames = "String here")
# A tibble: 32 x 12
   `String here`       mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
   <chr>             <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1 Mazda RX4          21       6  160    110  3.9   2.62  16.5     0     1     4     4
 2 Mazda RX4 Wag      21       6  160    110  3.9   2.88  17.0     0     1     4     4
 3 Datsun 710         22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
 4 Hornet 4 Drive     21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
 5 Hornet Sportabout  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
 6 Valiant            18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
 7 Duster 360         14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
 8 Merc 240D          24.4     4  147.    62  3.69  3.19  20       1     0     4     2
 9 Merc 230           22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
10 Merc 280           19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
# … with 22 more rows

但为什么最后一步是必要的?文档说,如果我设置了 rownames = NA,那么我会得到行为:NA: keep row names。这个示例如何阻止 rownames = NA 保留行名称,正如文档声称的那样?

解决方法

使用 as_tibble(mtcars,rownames = NA) 可以保留行名,但它们是不可见的。

library(tidyverse)

as_tibble(mtcars,rownames = NA) %>% 
  rownames_to_column()

#> # A tibble: 32 x 12
#>    rowname       mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#>    <chr>       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1 Mazda RX4    21       6  160    110  3.9   2.62  16.5     0     1     4     4
#>  2 Mazda RX4 ~  21       6  160    110  3.9   2.88  17.0     0     1     4     4
#>  3 Datsun 710   22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
#>  4 Hornet 4 D~  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
#>  5 Hornet Spo~  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
#>  6 Valiant      18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
#>  7 Duster 360   14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
#>  8 Merc 240D    24.4     4  147.    62  3.69  3.19  20       1     0     4     2
#>  9 Merc 230     22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
#> 10 Merc 280     19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
#> # ... with 22 more rows

检查不使用 rownames_to_column()rownames = NA 的输出差异

as_tibble(mtcars) %>% 
  rownames_to_column()

#> # A tibble: 32 x 12
#>    rowname   mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#>    <chr>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1 1        21       6  160    110  3.9   2.62  16.5     0     1     4     4
#>  2 2        21       6  160    110  3.9   2.88  17.0     0     1     4     4
#>  3 3        22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
#>  4 4        21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
#>  5 5        18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
#>  6 6        18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
#>  7 7        14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
#>  8 8        24.4     4  147.    62  3.69  3.19  20       1     0     4     2
#>  9 9        22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
#> 10 10       19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
#> # ... with 22 more rows

reprex package (v1.0.0) 于 2021 年 3 月 2 日创建

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。