dplyr在尊重group_by的同时使用动态变量名称进行突变 [英] dplyr mutate using dynamic variable name while respecting group_by

查看:71
本文介绍了dplyr在尊重group_by的同时使用动态变量名称进行突变的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试按照

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

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

to use dynamic names in mutate. What I am trying to do is to normalize column data by groups subject to a minimum standard deviation. Each column has a different minimum standard deviation

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

e.g. (I omitted loops & map statements for convenience)

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的主要好处

I got the dynamic assignment & variable selection to work as suggested by the reference answers. But group_by() is not respected which, for me at least, is the main benefit of using dplyr here

所需答案由

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

有没有办法解决?

推荐答案

我实际上对 pluck 不太了解,所以我不知道不知道出了什么问题,但是我会这样做,并且可以正常工作:

I actually did not know much about pluck, so I don't know what went wrong, but I would go for this and this works:

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

让我知道这是否不是您想要的东西。

Let me know if this isn't what you were looking for.

这篇关于dplyr在尊重group_by的同时使用动态变量名称进行突变的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆