计算移动矩阵的百分位数
Calculating percentile of moving matrix
我正在处理财务比率,我想构建一个数据框,其中包含相对于移动矩阵的观察值的百分比顺序。
假设我有如下数据框
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)
我想做的是创建一个新的数据框,其中包含基于最后 4 个观察结果的给定观察结果的百分比顺序和观察结果本身。
对于这个简化的练习,我在 Excel 中有 运行 它,新的数据框将是:
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)
我是初学者,试图从 Excel 中的小样本转移到 R 中的大样本。在 Excel 中,此练习的函数是 percentrank。
R 中的等效函数是什么?我试过 quantile()
但我不知道如何让它给我一个移动矩阵的百分比顺序。
提前感谢您的帮助
我们可以为这个工作写一个辅助函数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
我正在处理财务比率,我想构建一个数据框,其中包含相对于移动矩阵的观察值的百分比顺序。
假设我有如下数据框
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)
我想做的是创建一个新的数据框,其中包含基于最后 4 个观察结果的给定观察结果的百分比顺序和观察结果本身。
对于这个简化的练习,我在 Excel 中有 运行 它,新的数据框将是:
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)
我是初学者,试图从 Excel 中的小样本转移到 R 中的大样本。在 Excel 中,此练习的函数是 percentrank。
R 中的等效函数是什么?我试过 quantile()
但我不知道如何让它给我一个移动矩阵的百分比顺序。
提前感谢您的帮助
我们可以为这个工作写一个辅助函数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