通过R中的因素进行Winsorize?

时间:2019-02-26 17:55:31

标签: r

我很难弄清楚如何按组和条件对我的数据进行winsorize。过去,我为每个组和条件创建了新的矢量,分别进行Winsorized,然后将矢量绑定在一起。这似乎效率很低,我现在正在处理更大的数据集,这将使该过程非常耗时。我已经尝试过使用dplyr,但是还没有运气。这是我的数据以及我要执行的操作的示例。

library(robustHD)
library(dplyr)
set.seed(1)
df <- data.frame(id = rep(1:10, each=3),
                 group = rep(c('group1', 'group2'), each =3),
                 condition = rep(c('cond1', 'cond2', 'cond3'), times = 10),
                 measure = rep(1:5, each=3) + rnorm(15))

df$measure.win <- df %>% group_by(group, condition) %>%
  winsorize(df, measure)

这是我不断收到的错误:

Error in FUN(x, aperm(array(STATS, dims[perm]), order(perm)), ...) : non-numeric argument to binary operator

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

解决方案:

df = df %>% group_by(group, condition) %>% mutate(measure_winsorized = winsorize(measure))

(如果您对dplyr教程感兴趣,我强烈推荐this一个。)

初始响应:

通常,使用%>%将提供管道前面的函数的输出,作为管道后面的函数的输入。因此,如果您将使用winsorize()本身调用winsorize(df, measure)函数,则应省略第一个参数,并在此处使用winsorize(measure),因为前一个group_by(group_condition)的输出是数据框。

换句话说:这里可能发生的事情是您的函数调用被解释为winsorize(df, df, measure)

如果您可以共享您的winsorize()函数所在的软件包,我们可以帮助您提供适当的dplyr代码。