r - 受试者内部的胜利化

时间:2018-01-25 23:30:59

标签: r outliers desctools

我有一个长格式数据框data.set,其中每个主题每个条件都有不同的数值(data.set$target_resp.rt)。通过使用DescTool函数Winsorize(参见here获取信息),我已经根据总体标准对我的数据进行了优化:

overall.criterion.2sd <- data.set$overall.mean+(2*data.set$overall.sd)
winsors.2 <- DescTools::Winsorize(data.set$target_resp.rt, maxval=overall.criterion.2sd[1])

上面,可以将maxval定义为变量overall.criterion.2sd的第一个值,因为它与所有主题的值相同。现在我想按主题对我的数据进行优化,即我需要在主题内逐行进行胜利。这是我的尝试,criterion.2sd只是 N 值的矢量( N =主题编号):

criterion.2sd <- data.set$rt.mean+(2*data.set$rt.sd)
within.winsors.2 <- data.set %>% group_by(Nome, Cognome) %>%
                                    Winsorize(data.set$target_resp.rt, maxval=unique(criterion.2sd))

弹出以下错误:

  

[<-.data.frame中的错误(*tmp*,x&lt; minval,value =   c(1.35768795013,:&#39;值&#39;长度错误

我理解maxval变量的基数有问题,但我无法弄清楚如何修复它。有人可以帮忙吗?

以下是数据集data.set的一个示例(希望它足够了;让我知道它是否是正确的格式):

   subject        target_resp.rt   rt.mean     rt.sd
 1 1              1.0398901        0.9016781   0.3109358
 2 1              0.6887729        0.9016781   0.3109358
 3 1              0.7691720        0.9016781   0.3109358
 4 1              1.0064900        0.9016781   0.3109358
 5 1              0.8195999        0.9016781   0.3109358
 6 2              0.8410320        1.0500845   0.4210796
 7 2              0.8229311        1.0500845   0.4210796
 8 2              0.9250839        1.0500845   0.4210796
 9 2              1.0085750        1.0500845   0.4210796
10 2              1.1406291        1.0500845   0.4210796
11 3              0.5561039        0.749789    0.2350127
12 3              0.6022139        0.749789    0.2350127
13 3              0.8560688        0.749789    0.2350127
14 3              0.5886030        0.749789    0.2350127
15 3              0.5520449        0.749789    0.2350127

1 个答案:

答案 0 :(得分:1)

混合dplyr语法存在问题。在原始问题中,您将向量传递给Winsorize,但data.set %>% group_by(Nome, Cognome)是数据集,管道(%>%)将整个数据集传递给{{1}的第一个参数},意思是你真的在打电话

Winsorize

您真正想要的是在Winsorize(x = data.set, minval = ..., maxval = ...) 之后使用mutate来更改group_by;语法如下:

target_resp.rt

在数据集data.set %>% group_by(subject) %>% mutate(target_winsorized = Winsorize(target_resp.rt, maxval=unique(overall.criterion.2sd)) 中创建一个具有所需属性的新变量。将来您可能还希望将target_winsorized保存在数据集中。

文档

如果想要了解有关语法和overall.criterion.2sd样式的更多信息,请查看dplyr文档。