我已经检查过以前的类似帖子,但没有找到我需要的解决方案。 我需要使用
mutate
和 paste
将更多变量粘贴到新列中,但我需要避免对列名称进行硬编码。
这是一个示例数据集:
test <-data.frame(name=c("Andrea","Matteo","Matteo","sonia" ), code=c("A", "A", "B", "B"),number=c(1,1,2,2),
surname=c("surname1", "surname2", "surname3","surname4"))
我需要相当于这个的:
test1 <- test %>%
mutate(aggregate=paste(surname, number, name))
没有对列
name
进行编码。
我试过:
needed1 <-"name"
test2 <- test %>%
mutate(aggregate=paste(surname, number, paste(needed1)))
但它确实按预期工作。
解决方案是什么? 谢谢!
一种选择是使用
tidyr::unite
和 tidyselect::all_of
,如下所示:
needed1 <-"name"
library(tidyr)
test |>
unite(
"aggregate",
surname, number, all_of(needed1),
remove = FALSE,
sep = " "
)
#> aggregate name code number surname
#> 1 surname1 1 Andrea Andrea A 1 surname1
#> 2 surname2 1 Matteo Matteo A 1 surname2
#> 3 surname3 2 Matteo Matteo B 2 surname3
#> 4 surname4 2 sonia sonia B 2 surname4
test2 <- test %>%
mutate(aggregate := paste(surname, number, get(needed1)))
给予
all.equal(test1, test2)