我想使用变量的均值正负2个标准差作为截止点来对数据进行解冻。因此,我想逐个逐变量化每个变量。
我想在下面提供的示例代码中进行分类的变量有5个异常值。
我创建了两个基准(高和低),并将它们插入到minval和maxval中。只是为了防止造成误解:我的数据框中有几个时间点和组,grepl部分是将一个组在一个测量点上进行抽奖。
到目前为止,我的代码:
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,值= c(1,1.33333333333333,:替换有38行,数据有510“
我的替代人只有38行,因为^ 34. *组只有38位参与者。不过,我必须逐组和按测量点区分异常值...
如何替换/消除特定参与者组在RRS变量中的异常值?
非常感谢!
您对Winsorize()
的输入仅限于某些观察结果(grepl('^34.*', ds$QUESTNNR)
)。您只能将结果附加到相同数量的行(最好是完全相同的行):
ds$RRSout[ grepl('^34.*', ds$QUESTNNR) ] <-
Winsorize(ds $ RRS [grepl('^ 34. *',ds $ QUESTNNR)] ,,minval = Benchlow,maxval = benchhigh,na.rm = TRUE)