在 dplyr mutate 中,如何使用变量来分配新的列名?

Mik*_*ike 3 r dplyr

我可以使用变量来表示 中的列名称dplyr mutate,只要它位于计算部分的右侧即可。这工作正常:

library(dplyr)
var <- "mass"
x <- starwars %>%
  mutate(height = height * 2,
         mass = get(var) * 2)
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用变量来表示新的列名称(即在左侧),则会抛出错误。例如,这会导致错误:

var <- "mass"
x <- starwars %>%
  mutate(height = height * 2,
         get(var) = get(var) * 2)
Run Code Online (Sandbox Code Playgroud)

如何在 中使用变量作为列名mutate

akr*_*run 6

使用:=带有!!- 的运算符代替get,我们可以使用代词[[进行提取.data(或转换为symbol 并求值 (!! )

\n
library(dplyr)\nstarwars %>%\n  mutate(height = height * 2,\n         !! var := .data[[var]] * 2)\n         #or convert to symbol and evaluate\n         # !! var := !! rlang::sym(var) * 2)\n         #or use `{{}}`\n        # {{var}} := !! rlang::sym(var) * 2)\n
Run Code Online (Sandbox Code Playgroud)\n

-输出

\n
# A tibble: 87 \xc3\x97 14\n   name               height  mass hair_color    skin_color  eye_color birth_year sex    gender    homeworld species films     vehicles  starships\n   <chr>               <dbl> <dbl> <chr>         <chr>       <chr>          <dbl> <chr>  <chr>     <chr>     <chr>   <list>    <list>    <list>   \n 1 Luke Skywalker        344   154 blond         fair        blue            19   male   masculine Tatooine  Human   <chr [5]> <chr [2]> <chr [2]>\n 2 C-3PO                 334   150 <NA>          gold        yellow         112   none   masculine Tatooine  Droid   <chr [6]> <chr [0]> <chr [0]>\n 3 R2-D2                 192    64 <NA>          white, blue red             33   none   masculine Naboo     Droid   <chr [7]> <chr [0]> <chr [0]>\n 4 Darth Vader           404   272 none          white       yellow          41.9 male   masculine Tatooine  Human   <chr [4]> <chr [0]> <chr [1]>\n 5 Leia Organa           300    98 brown         light       brown           19   female feminine  Alderaan  Human   <chr [5]> <chr [1]> <chr [0]>\n 6 Owen Lars             356   240 brown, grey   light       blue            52   male   masculine Tatooine  Human   <chr [3]> <chr [0]> <chr [0]>\n 7 Beru Whitesun lars    330   150 brown         light       blue            47   female feminine  Tatooine  Human   <chr [3]> <chr [0]> <chr [0]>\n 8 R5-D4                 194    64 <NA>          white, red  red             NA   none   masculine Tatooine  Droid   <chr [1]> <chr [0]> <chr [0]>\n 9 Biggs Darklighter     366   168 black         light       brown           24   male   masculine Tatooine  Human   <chr [1]> <chr [0]> <chr [1]>\n10 Obi-Wan Kenobi        364   154 auburn, white fair        blue-gray       57   male   masculine Stewjon   Human   <chr [6]> <chr [1]> <chr [5]>\n# \xe2\x80\xa6 with 77 more rows\n
Run Code Online (Sandbox Code Playgroud)\n