提问人:Bastian 提问时间:1/8/2021 更新时间:1/8/2021 访问量:116
是否有一种稳定(未弃用)的 dplyr 方法可以根据名称向量添加多个列?
Is there a stable (non-deprecated) dplyr way of adding multiple columns based on a vector of names?
问:
假设我有一个简单的 data.frame:
> 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 做到这一点呢?我知道必须有一个组合使用 mutate(请记住,mutate_at,mutate_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
但是对于超过 1 个名称,它不起作用:
> 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的
不依赖于任何“被取代”、“已弃用”的东西。
答:
1赞
tmfmnk
1/8/2021
#1
一种方法可以是:
d %>%
add_column(!!!setNames(rep(NA, length(multip_name)), multip_name))
A B x y z
1 1 2 NA NA NA
评论