我很难弄清楚如何按组和条件对我的数据进行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
任何帮助将不胜感激!
答案 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代码。