我正在处理财务比率,我想构建一个数据框架,其中包含相对于移动矩阵的观察的百分比顺序。
假设我有以下数据框
$ 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)
,但我不知道如何让它给出移动矩阵的百分比顺序。
提前感谢您的帮助
答案 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