R 替换一行中顶部1%分位数的所有值

R 替换一行中顶部1%分位数的所有值,r,replace,quantile,R,Replace,Quantile,我有一个数据框架,由395行和4973列组成,按月份排序。我的数据帧测试如下所示: 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

我有一个数据框架,由395行和4973列组成,按月份排序。我的数据帧测试如下所示:

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

Test$Quantile我们可以使用
replace
替换每行大于
分位数的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
Test[-1]分位数(x,probs=0.99,na.rm=TRUE),na)
试验
#日期firm a firm b firm c firm d
#1 01-2015 20 NA 100 NA
#2 02-2015 21 502 2000不适用
#3 03-2015 22 3 2 NA
#4 04-2015 24 NA 5 1000

太好了,非常感谢!将尽快接受:)