使用 mutate 将更多变量粘贴在一起,而不对列名称 R 进行硬编码

问题描述 投票:0回答:2

我已经检查过以前的类似帖子,但没有找到我需要的解决方案。 我需要使用

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)))

但它确实按预期工作。

解决方案是什么? 谢谢!

r dplyr
2个回答
0
投票

一种选择是使用

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

0
投票
test2 <- test %>%
  mutate(aggregate := paste(surname, number, get(needed1)))

给予

all.equal(test1, test2)
© www.soinside.com 2019 - 2024. All rights reserved.