替换行中最高1%分位数的所有值

时间:2017-02-24 12:00:05

标签: r replace 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

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

1 个答案:

答案 0 :(得分:2)

我们可以使用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