使用其他动态列名称根据条件改变动态列名称

ang*_*shi 4 r dplyr

我正在尝试使用dplyr::mutate动态使用其他列的条件来更改动态列。

我有这段代码:

d <- mtcars %>% tibble
fld_name <-  "mpg"
other_fld_name <- "cyl"
d <- d %>% mutate(!!fld_name := ifelse(!!other_fld_name < 5,NA,!!fld_name))
Run Code Online (Sandbox Code Playgroud)

将 mpg 设置为

mpg  
   <chr>
 1 mpg  
 2 mpg  
 3 mpg  
 4 mpg  
 5 mpg  
 6 mpg  
 7 mpg  
 8 mpg  
 9 mpg  
10 mpg  
Run Code Online (Sandbox Code Playgroud)

它似乎选择了赋值运算符左侧的字段,但只是将字段名称粘贴到右侧。

删除 RHS 上的取消引号会产生相同的结果。

任何帮助深表感谢。

Ani*_*yal 5

用于get检索列值

library(tidyverse)

d <- mtcars %>% tibble
fld_name <-  "mpg"
other_fld_name <- "cyl"

d %>% mutate(!!fld_name := ifelse(get(other_fld_name) < 5 ,NA, get(fld_name)))

#> # A tibble: 32 x 11
#>      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#>    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
#>  2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
#>  3  NA       4  108     93  3.85  2.32  18.6     1     1     4     1
#>  4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
#>  5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
#>  6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
#>  7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
#>  8  NA       4  147.    62  3.69  3.19  20       1     0     4     2
#>  9  NA       4  141.    95  3.92  3.15  22.9     1     0     4     2
#> 10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
#> # ... with 22 more rows
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v2.0.0)创建于 2021-06-22