dplyr在遵守group_by的同时使用动态变量名称进行突变

hjw*_*hjw 5 r dplyr

我正在按照

使用变量列dplyr进行dplyr mutate-mutate:使用动态变量名

在mutate中使用动态名称。我要做的是按受最小标准偏差限制的组对列数据进行标准化。每列都有不同的最小标准偏差

例如(为方便起见,我省略了循环和映射语句)

require(dplyr)
require(magrittr)
data(iris)
iris <- tbl_df(iris)

minsd <- c('Sepal.Length' = 0.8)
varname <- 'Sepal.Length'

iris %>% group_by(Species) %>% mutate(!!varname := mean(pluck(iris,varname),na.rm=T)/max(sd(pluck(iris,varname)),minsd[varname]))
Run Code Online (Sandbox Code Playgroud)

我按照参考答案的建议进行了动态分配和变量选择。但是不尊重group_by(),至少对我来说,这是在此处使用dplyr的主要好处

所需的答案由

iris %>% group_by(Species) %>% mutate(!!varname := mean(Sepal.Length,na.rm=T)/max(sd(Sepal.Length),minsd[varname]))
Run Code Online (Sandbox Code Playgroud)

有没有解决的办法?

Kim*_*Kim 10

我实际上对 了解不多pluck,所以我不知道出了什么问题,但我会这样做,这很有效:

iris %>% group_by(Species) %>% 
  mutate(
    !! varname :=
      mean(!!as.name(varname), na.rm = T) / 
      max(sd(!!as.name(varname)),
          minsd[varname])
 )
Run Code Online (Sandbox Code Playgroud)

如果这不是您要找的,请告诉我。