如何系统地将多列作为多列的函数进行变异?

Deu*_*ium 6 r dplyr mutate across

我有一些随时间收集的变量。tibble 的一个非常简化的版本看起来像这样。

df = tribble(
~id, ~varA.t1, ~varA.t2, ~varB.t1, ~varB.t2,
'row_1', 5, 10, 2, 4,
'row_2', 20, 50, 4, 6
)
Run Code Online (Sandbox Code Playgroud)

我想系统地创建一组新的变量,varC以便varC.t#= varA.t#/ varB.t#where#是 1、2、3 等(类似于在上面的 tibble 中设置列​​名的方式)。

我如何使用类似mutate或 的东西across来做到这一点?

Ani*_*yal 4

您可以使用 执行类似的操作mutate(across...,但是,为了重命名列,必须有一个快捷方式。

df %>% 
  mutate(across(.cols = c(varA.t1, varA.t2),
                .fns = ~ .x / get(glue::glue(str_replace(cur_column(), "varA", "varB"))),
                .names = "V_{.col}")) %>%
  rename_with(~str_replace(., "V_varA", "varC"), starts_with("V_"))

# A tibble: 2 x 7
  id    varA.t1 varA.t2 varB.t1 varB.t2 varC.t1 varC.t2
  <chr>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
1 row_1       5      10       2       4     2.5    2.5 
2 row_2      20      50       4       6     5      8.33
Run Code Online (Sandbox Code Playgroud)

如果有很长的时间序列,您也可以.cols预先创建一个向量。