dplyr:在 mutate_at 函数中访问列名

Mor*_*arz 6 r dplyr

我想通过从其中减去名称几乎相同的另一列来更正 data.frame 中的一列,但另一列有后缀。我想为此使用该mutate_at功能。

试图弄清楚这一点,我一直在努力访问 mutate_at 的函数部分中的列名,以使用它来访问另一列。

我在下面的一个小例子中展示了这一点,但基本上我想访问当前使用的列的名称,.然后从管道中的数据中选择一个与名称相同.但带有后缀的列(在下面将是"_new")。

谢谢你的帮助!

这是我希望如何做的一个例子 - 但这不起作用。

library(tidyverse)
data("mtcars")
new <- mtcars/4
names(new) <-paste0(names(new),"_new")

df <- bind_cols(mtcars,new)

df %>% 
  mutate_at(.vars = vars(carb,disp),
            .funs = list(corrected = ~ . - df %>% pull(paste0(names(.),"_new"))))

df %>% pull(paste0("carb","_new"))

Run Code Online (Sandbox Code Playgroud)

Abd*_*Mtk 5

而不是使用mutate_at为什么不使用mutate结合acrosscur_column即:

df %>% 
  mutate( across( c(carb,disp), ~ . - pull(df, paste0(cur_column(), "_new") ),  .names = "{.col}_corrected") )
Run Code Online (Sandbox Code Playgroud)

  • 这太棒了 - 我不知道 'cur_column' 并且这是在 dplyr 版本 1.0 之前编写的,所以 'across()' 还不存在(我认为)。但这很好地解决了这个问题,谢谢! (4认同)