hed*_*ds1 6 r tidyr tidyeval r-glue
以下是一些我们使用两个名称进行更广泛旋转的愚蠢数据:
library(tidyr)
df <- data.frame(
food = c('banana','banana','banana','banana','cheese','cheese','cheese','cheese'),
binary = c(rep(c('yes','no'), 4)),
car = c('toyota','subaru','mazda','skoda','toyota','subaru','mazda','skoda'),
fun = c(2,4,3,6,2,4,2,3))
df %>%
pivot_wider(
id_cols = food,
names_from = c(car, binary),
values_from = fun)
Run Code Online (Sandbox Code Playgroud)
如果我们想更改新变量名称的格式,例如从toyota_yes到yes_toyota,我们使用names_glue参数:
df %>%
pivot_wider(
id_cols = food,
names_from = c(car, binary),
names_glue = "{binary}_{car}",
values_from = fun)
Run Code Online (Sandbox Code Playgroud)
我面临的问题是找到正确的语法将变量名称传递给参数names_glue。将变量传递给 很容易names_from,例如:
var1 <- 'car'
var2 <- 'binary'
df %>%
pivot_wider(
id_cols = food,
names_from = c(var1, var2),
values_from = fun)
Run Code Online (Sandbox Code Playgroud)
但我们不能直接这样做names_glue:
df %>%
pivot_wider(
id_cols = food,
names_from = c(var1, var2),
names_glue = "{var1}_{var2}",
values_from = fun)
Run Code Online (Sandbox Code Playgroud)
错误:列名
car_binary、car_binary、 和car_binary不得重复。
据推测,它正在评估变量并将结果字符串(即“car”或“binary”)传递到粘合函数中。我已经尝试过一些通常用于整洁评估的东西(!!sym(...)等),但没有任何工作。使用变量作为参数,所需的输出如下names_glue:
# A tibble: 2 x 5
food yes_toyota no_subaru yes_mazda no_skoda
<fct> <dbl> <dbl> <dbl> <dbl>
1 banana 2 4 3 6
2 cheese 2 4 2 3
Run Code Online (Sandbox Code Playgroud)
您可以使用sprtinf/paste0来构造字符串:
library(tidyr)
df %>%
pivot_wider(
id_cols = food,
names_from = c(var1, var2),
names_glue = sprintf('{%s}_{%s}', var2, var1),
values_from = fun)
# food yes_toyota no_subaru yes_mazda no_skoda
# <chr> <dbl> <dbl> <dbl> <dbl>
#1 banana 2 4 3 6
#2 cheese 2 4 2 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6367 次 |
| 最近记录: |