gpt4 book ai didi

r - 使用 `mutate` 使用命名向量创建列副本

转载 作者:行者123 更新时间:2023-12-04 12:12:50 25 4
gpt4 key购买 nike

我有一个 tibble和一个命名向量。我想使用向量名称复制命名向量中的所有列,同时保留原始名称。
我知道如何相当简单地重命名所有列:

library(dplyr)

named_vector <-
c("var1" = "x1",
"var2" = "x2",
"var3" = "x3")

tibble(x1 = 1:3, x2 = 1:3, x3 = 1:3, z = 68, zz = 69) %>%
rename(!!!named_vector)
#> # A tibble: 3 x 5
#> var1 var2 var3 z zz
#> <int> <int> <int> <dbl> <dbl>
#> 1 1 1 1 68 69
#> 2 2 2 2 68 69
#> 3 3 3 3 68 69
创建于 2021-08-27 由 reprex package (v0.3.0)
但我不知道如何使用 mutate 做等效的事情.如何以保留原始名称但还有向量名称的方式制作列的副本?
我的预期输出相当于:
library(dplyr)

named_vector <-
c("var1" = "x1",
"var2" = "x2",
"var3" = "x3")

tibble(x1 = 1:3, x2 = 1:3, x3 = 1:3, z = 68, zz = 69) %>%
mutate(var1 = x1,
var2 = x2,
var3 = x3)
#> # A tibble: 3 x 8
#> x1 x2 x3 z zz var1 var2 var3
#> <int> <int> <int> <dbl> <dbl> <int> <int> <int>
#> 1 1 1 1 68 69 1 1 1
#> 2 2 2 2 68 69 2 2 2
#> 3 3 3 3 68 69 3 3 3
创建于 2021-08-27 由 reprex package (v0.3.0)

最佳答案

我们可以使用 acrossmutate ,并重命名为 str_replace通过用 'var' 替换子字符串 'x' 来创建新列

library(dplyr)
library(stringr)
tibble(x1 = 1:3, x2 = 1:3, x3 = 1:3) %>%
mutate(across(everything(),
.names = "{str_replace(.col, 'x', 'var')}"))
-输出
# A tibble: 3 x 6
x1 x2 x3 var1 var2 var3
<int> <int> <int> <int> <int> <int>
1 1 1 1 1 1 1
2 2 2 2 2 2 2
3 3 3 3 3 3 3

或使用 match.names 中的named_vector
tibble(x1 = 1:3, x2 = 1:3, x3 = 1:3) %>% 
mutate(across(all_of(unname(named_vector)),
.names = "{names(named_vector)[match(.col, named_vector)]}"))
-输出
# A tibble: 3 x 6
x1 x2 x3 var1 var2 var3
<int> <int> <int> <int> <int> <int>
1 1 1 1 1 1 1
2 2 2 2 2 2 2
3 3 3 3 3 3 3

使用更新后的帖子,解决方案也有效
tibble(x1 = 1:3, x2 = 1:3, x3 = 1:3, z = 68, zz = 69)  %>%  
mutate(across(all_of(unname(named_vector)),
.names = "{names(named_vector)[match(.col, named_vector)]}"))
# A tibble: 3 x 8
x1 x2 x3 z zz var1 var2 var3
<int> <int> <int> <dbl> <dbl> <int> <int> <int>
1 1 1 1 68 69 1 1 1
2 2 2 2 68 69 2 2 2
3 3 3 3 68 69 3 3 3

关于r - 使用 `mutate` 使用命名向量创建列副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68959057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com