Search code examples
rtibblenamesr-rownames

Why does as_tibble(mtcars,rownames = NA) not show the row names? The documentation says that it should


mtcars clearly has row names:

> 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

The documentation for as_tibble tells me that if I set rownames = NA I will get the behavior: NA: keep row names. I tried this:

> 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

Clearly, the row names are nowhere to be seen. The default behavior, i.e. as_tibble(mtcars,rownames = NULL) (equivalently, as_tibble(mtcars)) produces the same output, but with the asterisk above 1 and to the left of <dbl> removed.

If I instead use the third and final option for rownames, as_tibble(mtcars,rownames = "String here"), I finally get to keep the row names:

> 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

But why was that last step necessary? The documentation says that if I set rownames = NA, then I will get the behavior: NA: keep row names. What about this example prevented rownames = NA from keeping the row names, as the documentation claims that it does?


Solution

  • Using as_tibble(mtcars, rownames = NA) you do keep the rownames, but they are invisible.

    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
    

    Check the difference in output for rownames_to_column() when you don't use 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
    

    Created on 2021-03-02 by the reprex package (v1.0.0)