【问题标题】:R Winsorizing with specific cut-off values does not workR 使用特定截止值进行 Winsorizing 不起作用
【发布时间】:2019-10-07 05:11:06
【问题描述】:

我想使用变量的平均值加 (/减) 2 个标准差作为截止点来对我的数据进行微调。因此,我想一个一个地对每个变量进行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)

我得到的错误是:

$&lt;-.data.frame(*tmp*, RRSout, value = c(1, 1.33333333333333, : 替换有38行,数据有510"

我的替换只有 38 行,因为 ^34.* 组只有 38 名参与者。我必须对每组和测量点的异常值进行缩尾处理......

如何替换/删除 RRS 变量中特定参与者组的异常值?

非常感谢您!

【问题讨论】:

  • 为什么不提出一个类似结构但小于实际数据集的minimal reproducible example
  • 实际上我将编辑整个数据集,但分为四组。所以在第 34 组之后,我想对第 32 组的异常值进行缩尾处理,依此类推。因此,我的目标是一个完整的变量,由四个 Winsorized 组的结果组成。

标签: r trim desctools


【解决方案1】:

您对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)

【讨论】:

    猜你喜欢
    • 2021-03-14
    • 1970-01-01
    • 2021-06-26
    • 2015-06-09
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多