关于data.frame的R滚动方程

时间:2015-07-08 10:20:08

标签: r function dataframe

我对R来说还是比较新的,并且正在努力(A)构建滚动功能,并且(B)将该功能应用于整个数据框。

以下等式是我尝试为我的data.frame计算的:

DSCOREx  =  {[(BAIX-3 + BAIX-2 + BAIX-1)/3] - [(BAIX + BAIX+1 + BAIX+2)/3]}        
/ {√STDX * √(2/3)}

" BAI X-n" = X-n年的每个单元格中的值 示例:" BAI X-1" = X年之前一年的BAI值。

以下是data.frame的示例:

Year <- c(2000:2015)    
S1 <- c(10,14,12,9,6,14,7,12,11,8,9,15,9,10,7,11)    
S2 <- c(5,8,9,14,12,10,8,7,11,9,14,8,11,10,6,9)    
S3 <- c(12,13,9,8,11,7,10,9,11,14,8,6,10,9,12,14)    
df <- rbind(Year, S1, S2, S3)    
colnames(df) <- df[1,]    
df <- df[-1,]    

基本上我希望将方程应用于每个样本(S1-S3)的每个年度值(即BAI),并且输出将是每个样本每年都有DSCORE的新数据帧。

我从未编写过函数或将其应用于data.frame,所以我开始尝试将等式放在函数形式中:

STDx <- function (x) {(((((x-3)-((x-3 + x-2 + x-1)/3))^2)+(((x-2)-((x-3 + x-2 + x-1)/3))^2)+(((x-1)-((x-3 + x-2 + x-1)/3))^2))+((((x)-((x + x+1 + x+2)/3))^2)+(((x+1)-((x + x+1 + x+2)/3))^2)+(((x+2)-((x + x+1 + x+2)/3))^2)))/2}    
DSCOREx <- function(x) {(((x-3 + x-2 + x-1)/3) - ((x + x+1 + x+2)/3)) / ((sqrt(STDx)) * (sqrt(2/3)))}

现在我不知道接下来该怎么做才能将这些函数应用到我的data.frame(或者如果它们正确编写了!)。有关如何将该功能应用于我的data.frame的任何建议将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

我的问题并不完全清楚。您应该定义X,n和STDX。但也许这就是你要找的东西。

DSCOREx <- matrix(0,nrow=nrow(df), ncol = ncol(df))
colnames(DSCOREx) <- colnames(df)
rownames(DSCOREx) <- rownames(df)

for (i in seq(1,nrow(df))){
   for (j in seq(4,(ncol(df)-3))){
      DSCOREx[i,j] <- (df[i,j-3] + df[i,j-2] + df[i,j-1] - df[i,j+1] - df[i,j+2] - df[i,j+3])/3
   }
}

我没有包括分母。