如何将行名添加到magrittr链中的数据框

时间:2016-07-01 03:37:01

标签: r magrittr

我想反对: Convert row names into first column

在管道链的某处,我想将行名称添加到数据框中,例如,我想使用管道执行以下操作:

rownames(mtcars) <- as.character(1:nrow(mtcars))

所以它看起来像:

library(magrittr)
mtcars <-
    mtcars %>%
    ...???

请注意,@ akrun的答案显示,如果管道用于将数据框强制转换为tbl_df的函数,则行名称将丢失。

4 个答案:

答案 0 :(得分:6)

您可以使用row.names<-

mtcars <- mtcars %>% `row.names<-`(as.character(1:nrow(mtcars)))

应该有效。作为演示:

df <- data.frame(x = 1:5, y = 2:6)
df <- df %>% `row.names<-`(letters[1:5])
df

#   x y
# a 1 2
# b 2 3
# c 3 4
# d 4 5
# e 5 6

答案 1 :(得分:6)

其他可能性是使用set_rownames库中的magrittr别名。

mtcars <- 
  mtcars %>%
  set_rownames(as.character(1:nrow(mtcars)))

答案 2 :(得分:2)

tbl_df将其更改为行号。因此,我们不需要在更改行名称方面做任何额外的努力。

library(dplyr)
tbl_df(mtcars)

如果我们使用data.table

,则同样适用
as.data.table(mtcars)

由于OP评论将名称更改为除行序列之外的其他内容,如果我们使用相同的作业显示在其他帖子中

 mtcars %>%
     `row.names<-`(c(letters, LETTERS)[1:32]) %>%
      group_by(gear) %>%
      slice(1)
#     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1  21.4     6 258.0   110  3.08 3.215 19.44     1     0     3     1
#2  21.0     6 160.0   110  3.90 2.620 16.46     0     1     4     4
#3  26.0     4 120.3    91  4.43 2.140 16.70     0     1     5     2

正如我们所看到的,行名称再次变为序列。因此,如果我们将行名称更改为其他内容并执行dplyr链操作,则之前的更改毫无价值。

答案 3 :(得分:1)

实际上如顶部所述“执行相反的操作:将行名称转换为第一列”,即将一列数据转换为行名称,您需要使用tibble::column_to_rownames(),它非常适合管道。 (我知道您的示例指定了其他内容,即将数字序列转换为行名,您应该使用其他答案)

library(tidyverse)
starwars %>% column_to_rownames("name") %>% head()
#>                height mass  hair_color  skin_color eye_color birth_year
#> Luke Skywalker    172   77       blond        fair      blue       19.0
#> C-3PO             167   75        <NA>        gold    yellow      112.0
#> R2-D2              96   32        <NA> white, blue       red       33.0
#> Darth Vader       202  136        none       white    yellow       41.9
#> Leia Organa       150   49       brown       light     brown       19.0
#> Owen Lars         178  120 brown, grey       light      blue       52.0
#>                gender homeworld species
#> Luke Skywalker   male  Tatooine   Human
#> C-3PO            <NA>  Tatooine   Droid
#> R2-D2            <NA>     Naboo   Droid
#> Darth Vader      male  Tatooine   Human
#> Leia Organa    female  Alderaan   Human
#> Owen Lars        male  Tatooine   Human
#>                                                                                                                                                    films
#> Luke Skywalker                                           Revenge of the Sith, Return of the Jedi, The Empire Strikes Back, A New Hope, The Force Awakens
#> C-3PO                             Attack of the Clones, The Phantom Menace, Revenge of the Sith, Return of the Jedi, The Empire Strikes Back, A New Hope
#> R2-D2          Attack of the Clones, The Phantom Menace, Revenge of the Sith, Return of the Jedi, The Empire Strikes Back, A New Hope, The Force Awakens
#> Darth Vader                                                                 Revenge of the Sith, Return of the Jedi, The Empire Strikes Back, A New Hope
#> Leia Organa                                              Revenge of the Sith, Return of the Jedi, The Empire Strikes Back, A New Hope, The Force Awakens
#> Owen Lars                                                                                          Attack of the Clones, Revenge of the Sith, A New Hope
#>                                          vehicles                starships
#> Luke Skywalker Snowspeeder, Imperial Speeder Bike X-wing, Imperial shuttle
#> C-3PO                                                                     
#> R2-D2                                                                     
#> Darth Vader                                                TIE Advanced x1
#> Leia Organa                 Imperial Speeder Bike                         
#> Owen Lars

reprex package(v0.2.1)于2019-03-18创建