我正在尝试找出如何对纵向数据集中的个体分组进行Winsorize处理。
我最初看到这篇关于如何从变量的平均值中去除>2个标准差的数据的优秀答案。作者还有帮助性地演示了如何在类别内完成此操作。
我的用例略有不同:我有一个纵向数据集,我想删除随时间系统性显示为离群值的个体。我不想在主题内部取出极端观察值,而是要么完全排除这些个体(修剪数据),要么用截断值(Winsorizing)替换底部和顶部2.5%的值 (参见:http://en.wikipedia.org/wiki/Winsorising)。
例如,我的长格式数据可能如下所示:
我最初看到这篇关于如何从变量的平均值中去除>2个标准差的数据的优秀答案。作者还有帮助性地演示了如何在类别内完成此操作。
我的用例略有不同:我有一个纵向数据集,我想删除随时间系统性显示为离群值的个体。我不想在主题内部取出极端观察值,而是要么完全排除这些个体(修剪数据),要么用截断值(Winsorizing)替换底部和顶部2.5%的值 (参见:http://en.wikipedia.org/wiki/Winsorising)。
例如,我的长格式数据可能如下所示:
name time points
MJ 1 998
MJ 2 1000
MJ 3 998
MJ 4 3000
MJ 5 998
MJ 5 420
MJ 6 999
MJ 7 998
Lebron 1 9
Lebron 2 1
Lebron 3 3
Lebron 4 900
Lebron 5 4
Lebron 5 4
Lebron 6 3
Lebron 7 8
Kobe 1 2
Kobe 2 1
Kobe 3 4
Kobe 4 2
Kobe 5 1000
Kobe 5 4
Kobe 6 7
Kobe 7 9
Larry 1 2
Larry 2 1
Larry 3 4
Larry 4 2
Larry 5 800
Larry 5 4
Larry 6 7
Larry 7 9
如果我想在个体(name
)中删除points
的极端值,我的代码应该是:do.call(rbind,by(df,df$name,function(x) x[!abs(scale(x$points)) > 2,]))
但是我真正想做的是排除那些极端的个体(在这种情况下,MJ
)。我该如何做到呢?
(附注:请注意不要删除异常值的所有警告。这只是一个健壮性测试!)