计算移动矩阵的百分位数

时间:2017-07-23 11:12:58

标签: r dataframe percentile

我正在处理财务比率,我想构建一个数据框架,其中包含相对于移动矩阵的观察的百分比顺序。

假设我有以下数据框

$ npm install -g cordova ionic
npm ERR! code SELF_SIGNED_CERT_IN_CHAIN
npm ERR! errno SELF_SIGNED_CERT_IN_CHAIN
npm ERR! request to https://registry.npmjs.org/cordova failed, reason: self
signed certificate in certificate chain

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\samar_000\AppData\Roaming\npm-cache\_logs\2017-07-
23T10_58_18_779Z-debug.log

我想要做的是创建一个新的数据框,其中包含基于最后4个观察结果和观察本身的给定观察的百分比顺序。

对于这个简化的练习,我在Excel中运行它,新的数据框将是:

AAPL <- c(5,7,15,6,9,15,12,10,5,8)
MSFT <- c(20,14,12,15,10,15,18,22,17,20)
df <- data.frame (AAPL, MSFT)

我是一个初学者,试图从使用Excel中的小样本转移到R中的更大样本。在Excel中,此练习的功能将是百分之百。

R中的等效功能是什么?我试过AAPL.new <- c(NA,NA,NA,NA,0.75,0.75,0.5,0.5,0,0.25) MSFT.new <- c(NA,NA,NA,NA,0,0.75,1,1,0.5,0.75) df.new <- c(AAPL.new, MSFT.new) ,但我不知道如何让它给出移动矩阵的百分比顺序。

提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我们可以为这项工作编写辅助函数prank

prank <- function(x, n){
    sapply(seq_along(x), function(i){
        if(i > n) sum(x[i] > x[(i-n):(i-1)]) / n
        else NA
    })
}

df.new <- as.data.frame(lapply(df, prank, n = 4))
# > df.new
#    AAPL MSFT
# 1    NA   NA
# 2    NA   NA
# 3    NA   NA
# 4    NA   NA
# 5  0.75 0.00
# 6  0.75 0.75
# 7  0.50 1.00
# 8  0.50 1.00
# 9  0.00 0.50
# 10 0.25 0.75