我想使用变量的平均值加(/减)2个标准差作为截止点来对我的数据进行winsorize。因此,我想一个一个地对每个变量进行winsorize。
我想在下面提供的示例代码中进行优化的变量有 5 个异常值。
我创建了两个基准(高和低)并将它们插入到 minval 和 maxval 中。只是为了防止误解:我的数据框中有几个时间点和组,grepl 部分是只在一个测量点获得一组用于winsorizing。
到目前为止我的代码:
library(DescTools)
benchhigh <- mean(ds$RRS[grepl('^34.*', ds$QUESTNNR)], na.rm=TRUE) +
2*sd(ds$RRS[grepl('^34.*', ds$QUESTNNR)], na.rm=TRUE)
benchlow <- mean(ds$RRS[grepl('^34.*', ds$QUESTNNR)], na.rm=TRUE) -
2*sd(ds$RRS[grepl('^34.*', ds$QUESTNNR)], na.rm=TRUE)
ds$RRSout <- Winsorize( ds$RRS[ grepl('^34.*', ds$QUESTNNR) ],
minval = benchlow , maxval = benchhigh, na.rm = TRUE)
我得到的错误是:
“错误
$<-.data.frame
(*tmp*
, RRSout, value = c(1, 1.33333333333333, : 替换有 38 行,数据有 510”
我的替换只有 38 行,因为 ^34.* 组只有 38 名参与者。我必须对每组和测量点的异常值进行缩尾处理......
如何替换/优化 RRS 变量中特定参与者组的异常值?
非常感谢您!