使用 dplyr 截断数字变量的顶部和底部百分位数

Use dplyr to truncate top and bottom percentiles of a numeric variable

我生成了一个调查权重。因为离群调查权重会导致非常大的差异,我遵循许多统计书籍的提示:我想截断调查权重的前 5% 和后 5%。 我想为此使用 dplyr。

#generate data
data<-as.data.frame(cbind(sequence(2000),rnorm(2000,mean=3.16,sd=1.355686))) 
names(data)<-c("id","weight")

#This is how far i got
data2<-data %>% mutate(perc.weight=percent_rank(weight)) %>%
                mutate(perc.weight>0.95 | perc.weight<0.05)

在此之后,我得到了两个新变量。第一个变量给出权重的百分比等级。第二个变量显示,如果值超出目标范围。

现在,我想用构成这些百分位数边界的权重值替换 95-100 百分位数和 0-5 百分位数内的权重。

如有任何帮助,我将不胜感激!

您可以将 [=f11=] 函数与 pminpmax:

一起使用
data %>% mutate(weight_trunc = pmin(pmax(weight, quantile(weight, .05)), 
                                          quantile(weight, .95)))