如何将mutate_at中的列替换为tibble本身的另一个变量?

时间:2018-02-21 18:43:47

标签: r dplyr

我正在尝试使用mtcars本身的变量替换mtcars中的多个列。

例如,这是使用标量替换的代码:

mutate_at(.tbl = mtcars, vars(mpg, carb), function(x) 1)

现在,我希望能够通过例如disp来替换mpgcarb

中的值

我试过了:

mutate_at(.tbl = mtcars, vars(mpg, carb), funs(function(x = .tbl) x[['disp']]))
  

mutate_impl(.data,dots)中的错误:列mpg不受支持   类型函数

但我宁愿选择允许传递不带引号的名称的解决方案。例如,我是否可以强制funs()只查看正在变异的环境?

1 个答案:

答案 0 :(得分:1)

您可以使用:

mutate_at(.tbl = mtcars, vars(mpg, carb), funs(.data$disp))

(或等效地将.data$disp替换为.data[["disp"]])。

现在回答你在评论中提出的问题:

  

为什么它是.data而不是.tbl

因为.data不是函数参数之一的名称,而是来自rlang的代词。 (见?rlang::.data) 所以这里.data指的是通过.tbl参数提供的数据。

请注意,您可以从不在同一函数调用的另一个参数的定义中使用参数的名称。例如,考虑基础R的+函数。它有2个参数,即xy(正如您在?"+"中看到的那样)。

`+`(x = 2, y = 2)
# [1] 4

`+`(x = 2, y = x)
# Error: object 'x' not found