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