[英]How to use tidyverse summarise for median age, if age is in the variable name?
[英]Use dynamic name in tidyverse
我想用变量名对变量进行四舍五入。我在变异中使用动态名称时遇到问题。 这里的示例数据:
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)
但是当我使用 mutate 函数尝试它时,出现错误:
library(dplyr)
z <- "f116_gr_sc"
df %>%
mutate(!!z := round(paste0(!!z), 2))
怎么解决,非常感谢
添加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))
使用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
由reprex 包(v2.0.1) 创建于 2022-06-09
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.