使用 `dplyr::mutate()` 函数从指定的向量中创建多个新变量

5
我想在数据框中创建几个新的空变量,其中我在向量中指定变量名称。如果我只指定一个变量名,则可以工作,但是如果有多个变量名则会出错。 我尝试了一些以前的解决方案,但它们在这种情况下似乎不起作用,例如:
library(dplyr)

add_columns <- function(df, columns){
    columns <- quo(columns)
    mutate(df, !!columns := NA_character_)
}

columns <- c("x", "y")
iris %>% 
    add_columns(columns)

 Error: The LHS of `:=` must be a string or a symbol

期望的输出结果应该是:
# A tibble: 150 x 7
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species x     y    
          <dbl>       <dbl>        <dbl>       <dbl> <fct>   <chr> <chr>
 1         5.10        3.50         1.40       0.200 setosa  NA    NA   
 2         4.90        3.00         1.40       0.200 setosa  NA    NA   
 3         4.70        3.20         1.30       0.200 setosa  NA    NA   
 4         4.60        3.10         1.50       0.200 setosa  NA    NA   
 5         5.00        3.60         1.40       0.200 setosa  NA    NA   
 6         5.40        3.90         1.70       0.400 setosa  NA    NA   
 7         4.60        3.40         1.40       0.300 setosa  NA    NA   
 8         5.00        3.40         1.50       0.200 setosa  NA    NA   
 9         4.40        2.90         1.40       0.200 setosa  NA    NA   
10         4.90        3.10         1.50       0.100 setosa  NA    NA   
# ... with 140 more rows

我想知道如何使这个工作起来?

1个回答

7

这里不需要任何引号,因为你没有处理引用表达式。只需创建具有适当名称的向量并将它们拼接即可。在这里,我使用向量长度为1的事实进行了循环利用,但您也可以创建完整长度的向量:

add_columns <- function(df, columns){
  new <- rep(NA_character_, length(columns))
  names(new) <- columns
  mutate(df, !!!new)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接