给定一个数据框,我想使用每列的分位数来过滤每一列。我更喜欢使用dplyr/tidyverse来完成这个任务。
set.seed(23)
df <- data.frame(
x1 = runif(10, 0, 100),
x2 = runif(10, 0, 100),
x3 = runif(10, 0, 100)
)
df
> df
x1 x2 x3
1 57.66037 86.59590 58.63978
2 22.30729 70.14217 27.47410
3 33.18966 39.04731 14.76570
4 71.07246 31.47697 80.14103
5 81.94490 84.59473 38.64098
6 42.37206 13.92785 82.04507
7 96.35445 51.81206 68.49373
8 97.81304 59.35508 88.33893
9 84.05219 94.24617 11.19208
10 99.66112 62.80196 77.88340
> quantile(df$x1, .95)
95%
98.82949
> quantile(df$x2, .95)
95%
90.80355
我的期望结果是,要么得到一个长格式的数据框,其中超出设置的百分位数的任何值都将被设为NA或完全删除;要么得到一个宽格式的数据框,其中超出设置的百分位数的任何值都将被设为NA。