替换一行中前 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
我有一个包含 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