替换一行中前 1% 分位数的所有值

Replace all values in a row which are the top 1% quantile

我有一个包含 395 行和 4973 列的数据框,按月份排序。我的 Dataframe 测试看起来像这样:

Date     FirmA FirmB FirmC FirmD 
01-2015  20    NA    100   1000 
02-2015  21    502   2000  9378   
03-2015  22    3     2     100
04-2015  24    7000  5     1000

我想用 NA 替换每一行中前 1% 的分位数。 它应该如下所示:

Date     FirmA FirmB FirmC FirmD 
01-2015  20    NA    100   NA 
02-2015  21    502   2000  NA   
03-2015  22    3     2     NA
04-2015  24    NA  5     1000

我设法计算出每一行的分位数并将其放入新列 Test$Quantile。

Test$Quantile <- apply(Test[-1],1,quantile,probs=c(.99), na.rm=TRUE)

Date      FirmA FirmB FirmC FirmD Quantile
01-2015   20    NA    100   1000  982.00
02-2015   21    502   2000  9378  9156.66
03-2015   22    3     2     100   97.66
04-2015   24    7000  5     1000  6820.00

但是,我不知道如何替换行中大于该分位数值的所有值。而且我还认为一定有比创建一个新专栏更简单的解决方案。 感谢您的帮助。

我们可以使用 replace 将每行

中大于 quantile 的值替换为 NA
Test[-1] <- t(apply(Test[-1], 1, function(x) 
       replace(x, x> quantile(x, probs = 0.99, na.rm =TRUE), NA)))
Test
#     Date FirmA FirmB FirmC FirmD
#1 01-2015    20    NA   100    NA
#2 02-2015    21   502  2000    NA
#3 03-2015    22     3     2    NA
#4 04-2015    24    NA     5  1000