首页 > 解决方案 > R中按组对异常值进行Winsorization

问题描述

尝试按组对异常值进行缩尾处理时遇到了一个奇怪的问题。假设我们有一个这样的数据集,并且我们希望在我们认为合理的任何阈值上对 col1 和 col2 进行 Winsorize。

df <- data.frame(
  col1 = c(1:200, 101:300),
  col2 = c(1:199, NA, 101:110,NA, 112:300),
  year = c(rep(2005,200), rep(2006,200))
)

我的第一次尝试是:

df %>%
  group_by(year) %>%
  mutate_at(.funs = list(wins = robustHD::winsorize), .vars = vars(col1, col2)) %>%
  ungroup()

然而,什么都没有改变。然后我尝试另一个函数(DescTools::Winsorize),

df %>%
  group_by(year) %>%
  mutate_at(.funs = list(wins = Winsorize), .vars = vars(col1, col2), probs = c(0.05, 0.95), na.rm=TRUE) %>%
  ungroup()

它有效。我尝试了TIDYVERSE (dplyr)@Parfait 对此处样本的回答,似乎robustHD::winsorize确实有效,尽管不知道为什么 group 1of的值test2都是 NaN。任何人都知道为什么会发生这种情况?

标签: rdplyrdata-cleaning

解决方案


推荐阅读