Home > Mobile >  mutate create column with name from a variable
mutate create column with name from a variable

Time:11-06

I have a tibble data frame in R and I want to add a new column name but the name must come from the value of a variable, what is the easiest way to achieve this?

# let us generate a whole set of new features 
iris_tbl = as_tibble(iris)
iris_tbl <- iris_tbl %>% mutate(hello=1)
> print(iris_tbl)
# A tibble: 150 × 6
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species hello
          <dbl>       <dbl>        <dbl>       <dbl> <fct>   <dbl>
 1          5.1         3.5          1.4         0.2 setosa      1
 2          4.9         3            1.4         0.2 setosa      1
 3          4.7         3.2          1.3         0.2 setosa      1
 4          4.6         3.1          1.5         0.2 setosa      1
 5          5           3.6          1.4         0.2 setosa      1
 6          5.4         3.9          1.7         0.4 setosa      1
 7          4.6         3.4          1.4         0.3 setosa      1
 8          5           3.4          1.5         0.2 setosa      1
 9          4.4         2.9          1.4         0.2 setosa      1
10          4.9         3.1          1.5         0.1 setosa      1
# … with 140 more rows
# ℹ Use `print(n = ...)` to see more rows

# This is the example that does not work as desired
var_name='hello'
iris_tbl = as_tibble(iris)
iris_tbl <- iris_tbl %>% mutate(var_name=1)
> print(iris_tbl)
# A tibble: 150 × 6
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species var_name
          <dbl>       <dbl>        <dbl>       <dbl> <fct>      <dbl>
 1          5.1         3.5          1.4         0.2 setosa         1
 2          4.9         3            1.4         0.2 setosa         1
 3          4.7         3.2          1.3         0.2 setosa         1
 4          4.6         3.1          1.5         0.2 setosa         1
 5          5           3.6          1.4         0.2 setosa         1
 6          5.4         3.9          1.7         0.4 setosa         1
 7          4.6         3.4          1.4         0.3 setosa         1
 8          5           3.4          1.5         0.2 setosa         1
 9          4.4         2.9          1.4         0.2 setosa         1
10          4.9         3.1          1.5         0.1 setosa         1
# … with 140 more rows
# ℹ Use `print(n = ...)` to see more rows

In the first example the column name created from mutate is actually a column called 'hello'. In the second example mutate names the column 'var_name', instead of 'hello' which is the desired outcome.

Any suggestions on how to make this as easy as possible?

CodePudding user response:

Enter the command ?dplyr_data_masking

If you read through that, you can see there are at least 2 ways you can get your desired result.

iris_tbl <- iris_tbl %>% mutate("{var_name}" := 1)

Or

iris_tbl <- iris_tbl %>% mutate({{var_name}} := 1)

  • Related