r-是否有一种稳定(不推荐使用)的dplyr方法可以基于名称向量添加多个列



假设我有一个简单的数据帧:

> d <- data.frame(A=1, B=2)

现在我想添加3列,{X,Y,Z}存储在一个向量中。让我们跳过原因,集中讨论解决方案。

在基础R中,我可以做一些琐碎的事情:

> columns_to_add <- c("X", "Y", "Z")
> d[,columns_to_add] <- NA
> d
A B  X  Y  Z
1 1 2 NA NA NA

但是如何使用dplyr呢?我知道一定有一个使用突变的组合(记住,突变_at,突变_all总有一天会被弃用(,":="赋值运算符和{{}}或三重爆炸运算符!!!rlang::syms((?

让我们有:

> single_name <- c("x")
> multip_name <- c("x", "y", "z")

对于单个名称,它是有效的:

> d %>% mutate(!!sym(single_name) := NA)
A B  x
1 1 2 NA
> d %>% mutate({{single_name}} := NA)
A B  x
1 1 2 NA

但对于一个以上的名称,它不起作用:

> d %>% mutate({{multip_name}} := NA)
Error: The LHS of `:=` must be a string or a symbol
Run `rlang::last_error()` to see where the error occurred.
> d %>% mutate(!!!syms(multip_name) := NA)
Error: The LHS of `:=` can't be spliced with `!!!`
Run `rlang::last_error()` to see where the error occurred.

它不一定是";突变";,请提出以下建议:

  • 来自tidyverse

  • 不依赖于任何";被取代"被否决的";东西

一种方法可以是:

d %>%
add_column(!!!setNames(rep(NA, length(multip_name)), multip_name))
A B  x  y  z
1 1 2 NA NA NA

相关内容

  • 没有找到相关文章

最新更新