使用dplyr创建命名向量

gja*_*bel 5 r vector dplyr

我试图找到一种方法来使用管道从数据框(值之一,名称之一)中的两列创建命名向量.到目前为止,我有以下(使用mtcars示例数据)...

library(tidyverse)

x <- mtcars %>%
  rownames_to_column("car") %>%
  select(car, mpg)
  pull(mpg)

names(x) <- row.names(mtcars)

x
#            Mazda RX4       Mazda RX4 Wag          Datsun 710      Hornet 4 Drive   Hornet Sportabout 
#                 21.0                21.0                22.8                21.4                18.7 
#              Valiant          Duster 360           Merc 240D            Merc 230            Merc 280 
#                 18.1                14.3                24.4                22.8                19.2 
#            Merc 280C          Merc 450SE          Merc 450SL         Merc 450SLC  Cadillac Fleetwood 
#                 17.8                16.4                17.3                15.2                10.4 
#  Lincoln Continental   Chrysler Imperial            Fiat 128         Honda Civic      Toyota Corolla 
#                 10.4                14.7                32.4                30.4                33.9 
#        Toyota Corona    Dodge Challenger         AMC Javelin          Camaro Z28    Pontiac Firebird 
#                 21.5                15.5                15.2                13.3                19.2 
#            Fiat X1-9       Porsche 914-2        Lotus Europa      Ford Pantera L        Ferrari Dino 
#                 27.3                26.0                30.4                15.8                19.7 
#        Maserati Bora          Volvo 142E 
#                 15.0                21.4 
Run Code Online (Sandbox Code Playgroud)

当涉及到我的实际数据时,这不是很方便,因为我想避免将转换后的数据帧的副本保存为仅使用该name函数的名称列.

akr*_*run 6

我们可以使用它names<-来获得一个名字vector

library(tidyverse)
mtcars %>% 
   rownames_to_column("car") %>%
   {'names<-'(.$mpg, .$car)}
Run Code Online (Sandbox Code Playgroud)

或者 set_names

mtcars %>% 
   rownames_to_column("car") %>% 
   select(x = mpg, nm = car) %>%
   pmap(set_names) %>% 
   unlist
Run Code Online (Sandbox Code Playgroud)

  • 来自`magrittr`的`%$%`在这种情况下很有用.`mtcars%>%rownames_to_column("car")%$%'姓名< - '(mpg,car)` (4认同)

mda*_*g02 6

tibble1.3.0 (2017-04-02) 开始,您可以使用tibble::deframe()

library(tidyverse)

mtcars %>%
  rownames_to_column("car") %>%
  select(car, mpg) %>% 
  deframe()
Run Code Online (Sandbox Code Playgroud)
          Mazda RX4       Mazda RX4 Wag          Datsun 710 
               21,0                21,0                22,8 
     Hornet 4 Drive   Hornet Sportabout             Valiant 
               21,4                18,7                18,1 
         Duster 360           Merc 240D            Merc 230 
               14,3                24,4                22,8 
           Merc 280           Merc 280C          Merc 450SE 
               19,2                17,8                16,4 
         Merc 450SL         Merc 450SLC  Cadillac Fleetwood 
               17,3                15,2                10,4 
Lincoln Continental   Chrysler Imperial            Fiat 128 
               10,4                14,7                32,4 
        Honda Civic      Toyota Corolla       Toyota Corona 
               30,4                33,9                21,5 
   Dodge Challenger         AMC Javelin          Camaro Z28 
               15,5                15,2                13,3 
   Pontiac Firebird           Fiat X1-9       Porsche 914-2 
               19,2                27,3                26,0 
       Lotus Europa      Ford Pantera L        Ferrari Dino 
               30,4                15,8                19,7 
      Maserati Bora          Volvo 142E 
               15,0                21,4 
Run Code Online (Sandbox Code Playgroud)