首页 文章

dplyr使用动态变量名变异,同时尊重group_by

提问于
浏览
3

我正在尝试

dplyr mutate using variable columnsdplyr - mutate: use dynamic variable names

在mutate中使用动态名称 . 我想要做的是按照最小标准偏差的组对列数据进行标准化 . 每列具有不同的最小标准偏差

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

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]))

我得到了动态分配和变量选择,以便按参考答案的建议工作 . 但是group_by()不受尊重,至少对我而言,这是使用dplyr的主要好处

期望的答案由

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

有没有解决的办法?

1 回答

  • 3

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

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

    如果这不是你想要的,请告诉我 .

相关问题