r - 主体内缩尾处理
r - within-subject winsorization
我有一个长格式数据框 data.set
,其中每个主题在每个条件下都有不同的数值 (data.set$target_resp.rt
)。我已经使用 DescTool 函数 Winsorize
根据总体标准对我的数据进行了 winsorized(有关信息,请参阅 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
的第一个值,因为它对所有主题都是相同的值。现在我想按主题对我的数据进行 winsorization,即我需要 运行 在主题内逐行进行 winsorization。这是我的尝试,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))
弹出如下错误:
Error in [<-.data.frame
(*tmp*
, x < minval, value =
c(1.35768795013, : 'value' is the wrong length
我知道 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
这是 dplyr 语法混淆的问题。在原始问题中,您将向量传递给 Winsorize
,但 data.set %>% group_by(Nome, Cognome)
是一个数据集,管道 (%>%
) 将整个数据集传递给 [=12= 的第一个参数],意思是你真的在打电话给
Winsorize(x = data.set, minval = ..., maxval = ...)
你真正想要的是在group_by
之后使用mutate
来改变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
样式的更多信息,请查看 dplyr
文档。
我有一个长格式数据框 data.set
,其中每个主题在每个条件下都有不同的数值 (data.set$target_resp.rt
)。我已经使用 DescTool 函数 Winsorize
根据总体标准对我的数据进行了 winsorized(有关信息,请参阅 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
的第一个值,因为它对所有主题都是相同的值。现在我想按主题对我的数据进行 winsorization,即我需要 运行 在主题内逐行进行 winsorization。这是我的尝试,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))
弹出如下错误:
Error in
[<-.data.frame
(*tmp*
, x < minval, value = c(1.35768795013, : 'value' is the wrong length
我知道 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
这是 dplyr 语法混淆的问题。在原始问题中,您将向量传递给 Winsorize
,但 data.set %>% group_by(Nome, Cognome)
是一个数据集,管道 (%>%
) 将整个数据集传递给 [=12= 的第一个参数],意思是你真的在打电话给
Winsorize(x = data.set, minval = ..., maxval = ...)
你真正想要的是在group_by
之后使用mutate
来改变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
样式的更多信息,请查看 dplyr
文档。