在整理中使用动态名称

发布于 2025-02-05 19:58:33 字数 672 浏览 3 评论 0原文

我想用变量名称为“对象”将变量围起来。我在突变中使用动态名称有问题。 在这里示例数据:

df <- structure(list(f116_gr = c(1, 2, 3, 5, 4, 6, NA), 
                     f116_gr_sc = c(-1.36988327957453,-0.144575006139099, 0.63865967223421, 
                                    1.23657391288124, 1.53907997023586,-0.280185492819537, 0)), 
                row.names = c(NA, -7L), class = c("tbl_df","tbl", "data.frame"))

我可以使用此代码进行操作:

z <- "f116_gr_sc"
df[, eval(z)] = round(df[, eval(z)], 2)

但是当我使用突变功能尝试时,有一个错误:

library(dplyr)
z <- "f116_gr_sc"
df %>%
    mutate(!!z := round(paste0(!!z), 2))

我该如何修复,非常感谢

I want to round the variable with name of variable is object.I have problem with using dynamic name in mutate.
Here sample data:

df <- structure(list(f116_gr = c(1, 2, 3, 5, 4, 6, NA), 
                     f116_gr_sc = c(-1.36988327957453,-0.144575006139099, 0.63865967223421, 
                                    1.23657391288124, 1.53907997023586,-0.280185492819537, 0)), 
                row.names = c(NA, -7L), class = c("tbl_df","tbl", "data.frame"))

I can do it with this code:

z <- "f116_gr_sc"
df[, eval(z)] = round(df[, eval(z)], 2)

But when i try it using mutate function, there is a error:

library(dplyr)
z <- "f116_gr_sc"
df %>%
    mutate(!!z := round(paste0(!!z), 2))

How can i fix it, thank all very much

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

酷到爆炸 2025-02-12 19:58:35

添加as.name将有所帮助。

x <- "f116"
z <- "f116_gr_sc"
df %>%
  mutate(!!z := round(!!as.name(paste0(x,"_gr_sc")), 2))

  f116_gr f116_gr_sc
    <dbl>      <dbl>
1       1      -1.37
2       2      -0.14
3       3       0.64
4       5       1.24
5       4       1.54
6       6      -0.28
7      NA       0   

这将有效。

z

df %>%
  mutate(!!z := round(!!as.name(paste0(z)), 2))

Add as.name will helps.

x <- "f116"
z <- "f116_gr_sc"
df %>%
  mutate(!!z := round(!!as.name(paste0(x,"_gr_sc")), 2))

  f116_gr f116_gr_sc
    <dbl>      <dbl>
1       1      -1.37
2       2      -0.14
3       3       0.64
4       5       1.24
5       4       1.54
6       6      -0.28
7      NA       0   

This will works.

new z

df %>%
  mutate(!!z := round(!!as.name(paste0(z)), 2))
紫罗兰の梦幻 2025-02-12 19:58:35

使用sym

df <- data.frame(
  f116_gr = c(1, 2, 3, 5, 4, 6, NA),
  f116_gr_sc = c(-1.36988327957453,-0.144575006139099,
                 0.63865967223421,1.23657391288124,1.53907997023586,
                 -0.280185492819537,0))
z <- "f116_gr_sc"

library(tidyverse)
df %>% 
 mutate(!!sym(z) := round(!!sym(z), 2))
#>   f116_gr f116_gr_sc
#> 1       1      -1.37
#> 2       2      -0.14
#> 3       3       0.64
#> 4       5       1.24
#> 5       4       1.54
#> 6       6      -0.28
#> 7      NA       0.00

# or
z <- sym("f116_gr_sc")
df %>% 
  mutate(!!z := round(!!z, 2))
#>   f116_gr f116_gr_sc
#> 1       1      -1.37
#> 2       2      -0.14
#> 3       3       0.64
#> 4       5       1.24
#> 5       4       1.54
#> 6       6      -0.28
#> 7      NA       0.00

在2022-06-09创建的 v2.0.1)

use sym

df <- data.frame(
  f116_gr = c(1, 2, 3, 5, 4, 6, NA),
  f116_gr_sc = c(-1.36988327957453,-0.144575006139099,
                 0.63865967223421,1.23657391288124,1.53907997023586,
                 -0.280185492819537,0))
z <- "f116_gr_sc"

library(tidyverse)
df %>% 
 mutate(!!sym(z) := round(!!sym(z), 2))
#>   f116_gr f116_gr_sc
#> 1       1      -1.37
#> 2       2      -0.14
#> 3       3       0.64
#> 4       5       1.24
#> 5       4       1.54
#> 6       6      -0.28
#> 7      NA       0.00

# or
z <- sym("f116_gr_sc")
df %>% 
  mutate(!!z := round(!!z, 2))
#>   f116_gr f116_gr_sc
#> 1       1      -1.37
#> 2       2      -0.14
#> 3       3       0.64
#> 4       5       1.24
#> 5       4       1.54
#> 6       6      -0.28
#> 7      NA       0.00

Created on 2022-06-09 by the reprex package (v2.0.1)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文