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来做到这一点?
您可以使用 执行类似的操作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预先创建一个向量。